🚀 C# ile Programlamaya Giriş: Kodlamaya İlk Adımını At, Kendi Projelerini Geliştirmeye Başla!
00ANASAYFA 01YAZILAR 02EĞİTİM 03ELEKTRİK_ENERJİ 04OTOMOTİV_MÜHENDİSLİĞİ 05ARAÇLAR 06LAB 07SÖZLÜK 08ETİKETLER ♡OKUMA LİSTEM ⌕ARA
TRENG

Diziler ve List<T>

Birçok değeri tek isim altında tutmayı öğreniyorsun: sabit boyutlu diziler, esnek List<T> ve sensör verisi ortalaması örneği.

Dizi: sıralı kutular

5 sensörden gelen 5 sıcaklığı s1, s2, s3... diye ayrı değişkenlerde tutmak zordur. Dizi, aynı tipte birçok değeri yan yana ve numaralı biçimde saklar. Numaralara indeks denir ve 0'dan başlar.

double[] sicakliklar = { 21.5, 22.1, 20.9, 23.4, 22.8 };

Console.WriteLine(sicakliklar[0]);              // ilk eleman: 21,5
Console.WriteLine(sicakliklar[4]);              // son eleman: 22,8
Console.WriteLine(sicakliklar.Length);          // eleman sayısı: 5

sicakliklar[2] = 21.0;                          // elemanı değiştir

Boş dizi oluşturmak için boyutu belirtirsin: int[] sayilar = new int[10]; (hepsi 0 ile başlar). Dizinin boyutu sonradan değişmez.

Sınır dışı: 5 elemanlı dizide dizi[5] yazarsan IndexOutOfRangeException hatası alırsın; geçerli indeksler 0-4'tür. "Bir eksik" hatası yeni başlayanların en sık hatalarındandır.

Dizi üzerinde işlem: ortalama

double[] olcumler = { 21.5, 22.1, 20.9, 23.4, 22.8 };

double toplam = 0;
double enBuyuk = olcumler[0];
double enKucuk = olcumler[0];

foreach (double deger in olcumler)
{
    toplam += deger;
    if (deger > enBuyuk) enBuyuk = deger;
    if (deger < enKucuk) enKucuk = deger;
}

double ortalama = toplam / olcumler.Length;
Console.WriteLine($"Ortalama: {ortalama:F2} °C");
Console.WriteLine($"En düşük: {enKucuk}, en yüksek: {enBuyuk}");
Ortalama: 22,14 °C
En düşük: 20,9, en yüksek: 23,4

Toplam 110,7; beş değere bölünce 22,14 çıkar. İşte gerçek bir ölçüm yazılımının çekirdeği.

for ile indeksli gezinti

İndeksi bilmek istiyorsan for kullan:

string[] kanallar = { "CH1", "CH2", "CH3" };

for (int i = 0; i < kanallar.Length; i++)
{
    Console.WriteLine($"{i}: {kanallar[i]}");
}

Array sınıfının yardımcıları

int[] sayilar = { 42, 7, 19, 3 };

Array.Sort(sayilar);                       // küçükten büyüğe
Console.WriteLine(string.Join(", ", sayilar));

Array.Reverse(sayilar);                    // tersine çevir
Console.WriteLine(string.Join(", ", sayilar));

Console.WriteLine(Array.IndexOf(sayilar, 19));   // 19'un indeksi
3, 7, 19, 42
42, 19, 7, 3
1

List<T>: büyüyüp küçülen liste

Dizinin boyutu sabittir. Kaç eleman geleceğini bilmediğinde (örneğin sensör çalıştıkça yeni ölçüm eklenecekse) List<T> kullanırsın. Buradaki T tür parametresidir: List<int> tam sayı listesi, List<string> metin listesidir.

var olcumler = new List<double>();

olcumler.Add(3.3);
olcumler.Add(3.1);
olcumler.Add(3.4);
olcumler.Insert(0, 3.0);          // başa ekle

Console.WriteLine(olcumler.Count);        // 4
olcumler.Remove(3.1);                     // değere göre sil
olcumler.RemoveAt(0);                     // indekse göre sil

Console.WriteLine(olcumler.Contains(3.4)); // True
foreach (var d in olcumler) Console.WriteLine(d);
4
True
3,3
3,4

Dizide eleman sayısına Length, listede Count denir; ikisini karıştırmak sık yapılan bir yanlıştır.

Sıralama ve arama

var notlar = new List<int> { 70, 45, 90, 62 };

notlar.Sort();
Console.WriteLine(string.Join(" ", notlar));   // 45 62 70 90

int ilkGecen = notlar.Find(n => n >= 60);       // koşulu sağlayan ilk eleman
Console.WriteLine(ilkGecen);                     // 62

n => n >= 60 bir lambda ifadesidir: "n verilirse n'in 60'a büyük eşit olup olmadığını söyle" anlamına gelen küçük, adsız bir metot. Lambda'ları LINQ dersinde yoğun kullanacağız.

Hangisini seçeyim? Boyut baştan belli ve değişmeyecekse dizi; ekleme-silme olacaksa List<T>. Yeni kodda çoğunlukla List<T> kullanılır.

Kendin dene

Bir List<double> oluştur ve kullanıcıdan "bitti" yazana kadar gerilim ölçümleri iste (while ve TryParse ile). Sonunda kaç ölçüm alındığını, ortalamayı ve en büyük değeri yaz. Hiç ölçüm girilmediyse bölme hatası vermemek için kontrol ekle.

// Mini sınav

Bir seçeneğe tıkla; doğru mu yanlış mı, anında ve nedeniyle birlikte göreceksin.

1. 5 elemanlı bir dizide geçerli indeksler hangileridir?
2. Boyutu çalışma sırasında büyüyüp küçülebilen yapı hangisidir?
3. Bir List<T> içindeki eleman sayısını veren özellik hangisidir?

Bitirdiğinde işaretle: ilerlemen kaydolur, +20 XP kazanırsın.

İpucu: ← → tuşlarıyla dersler arasında gezinebilirsin.