9. Diziler ve Koleksiyonlar (Array, List, Dictionary, vb.)

C# Logo
C# Logo
image text

9. Diziler ve Koleksiyonlar (Array, List, Dictionary, vb.)

C# programlama dilinde, verileri düzenli bir şekilde saklamak ve yönetmek için çeşitli yapılar bulunur. Bunlar arasında diziler (arrays) ve koleksiyonlar (collections) öne çıkar. Bu yapılar, aynı türden veya farklı türden verileri bir arada tutarak, programın daha verimli ve düzenli çalışmasını sağlar. Bu makalede, C# dilindeki dizileri, koleksiyonları ve en sık kullanılan koleksiyon türlerini detaylı bir şekilde inceleyeceğiz.

Diziler (Arrays)

Diziler, aynı türden verilerin sıralı bir şekilde saklandığı veri yapılarıdır. Dizilerin boyutu tanımlanırken belirtilir ve daha sonra değiştirilemez. Bu, dizilerin bellekte sabit bir alana sahip olmasını sağlar, bu da performansı artırır. Ancak, boyutun sabit olması, esneklik açısından bazı sınırlamalar getirebilir.

Dizi Tanımlama ve Kullanımı

C# dilinde bir dizi tanımlamak için aşağıdaki sözdizimi kullanılır:

C#

tür[] diziAdı = new tür[boyut];

Örneğin, 5 elemanlı bir integer dizisi tanımlamak için:

C#

int[] sayilar = new int[5];

Dizinin elemanlarına erişmek için indeksler kullanılır. İndeksler 0’dan başlar:

C#

sayilar[0] = 10;
sayilar[1] = 20;
// ...

Dizi Örneği

Aşağıdaki örnek, bir integer dizisi oluşturur, elemanlarına değer atar ve ekrana yazdırır:

C#

using System;

public class DiziOrnek
{
    public static void Main(string[] args)
    {
        int[] sayilar = new int[5];
        sayilar[0] = 10;
        sayilar[1] = 20;
        sayilar[2] = 30;
        sayilar[3] = 40;
        sayilar[4] = 50;

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

Bu kodun çıktısı:


sayilar[0] = 10
sayilar[1] = 20
sayilar[2] = 30
sayilar[3] = 40
sayilar[4] = 50

Koleksiyonlar (Collections)

Koleksiyonlar, dizilere göre daha esnek ve dinamik veri yapılarıdır. Koleksiyonların boyutu, eleman ekleme veya çıkarma işlemlerine göre otomatik olarak ayarlanabilir. C# dilinde, System.Collections ve System.Collections.Generic isim alanlarında birçok farklı koleksiyon türü bulunur.

ArrayList

ArrayList, farklı türden nesneleri saklayabilen, dinamik boyutlu bir koleksiyondur. Ancak, ArrayList‘e değer eklerken ve değer okurken boxing ve unboxing işlemleri yapılması gerektiği için performans sorunlarına yol açabilir. Bu nedenle, mümkünse generic koleksiyonlar tercih edilmelidir.

C#

using System.Collections;

ArrayList liste = new ArrayList();
liste.Add(10);
liste.Add("Merhaba");
liste.Add(true);

List<T>

List<T>, generic bir koleksiyon türüdür. Yani, belirli bir türdeki (T) nesneleri saklar. Bu, boxing ve unboxing işlemlerini ortadan kaldırarak performansı artırır. List<T>, en sık kullanılan koleksiyon türlerinden biridir.

C#

using System.Collections.Generic;

List sayilar = new List();
sayilar.Add(10);
sayilar.Add(20);

Dictionary<TKey, TValue>

Dictionary<TKey, TValue>, anahtar-değer çiftlerini saklayan bir koleksiyondur. Her anahtar benzersiz olmalıdır. Dictionary, verilere hızlı bir şekilde erişmek için idealdir. Örneğin, bir öğrenci numarasını anahtar, öğrenci adını değer olarak saklayabilirsiniz.

C#

using System.Collections.Generic;

Dictionary<int, string> ogrenciler = new Dictionary<int, string>();
ogrenciler.Add(1, "Ahmet");
ogrenciler.Add(2, "Ayşe");

HashSet<T>

HashSet<T>, benzersiz elemanları saklayan bir koleksiyondur. Bir elemanı birden fazla kez eklemeye çalışırsanız, sadece bir tanesi saklanır. HashSet, bir listede tekrar eden elemanları bulmak veya benzersiz elemanlardan oluşan bir küme oluşturmak için kullanışlıdır.

C#

using System.Collections.Generic;

HashSet sayilar = new HashSet();
sayilar.Add(10);
sayilar.Add(20);
sayilar.Add(10); // Tekrar eklemeye çalışsak bile sadece bir tane 10 saklanır.

Queue<T>

Queue<T>, FIFO (First-In-First-Out – İlk Giren İlk Çıkar) prensibine göre çalışan bir koleksiyondur. Elemanlar sırayla eklenir ve sırayla çıkarılır. Kuyruk yapısı, görevleri veya işlemleri sıraya koymak için kullanışlıdır.

C#

using System.Collections.Generic;

Queue mesajlar = new Queue();
mesajlar.Enqueue("Merhaba");
mesajlar.Enqueue("Dünya");

string ilkMesaj = mesajlar.Dequeue(); // İlk mesajı (Merhaba) alır ve kuyruktan çıkarır.

Stack<T>

Stack<T>, LIFO (Last-In-First-Out – Son Giren İlk Çıkar) prensibine göre çalışan bir koleksiyondur. Elemanlar sırayla eklenir ve en son eklenen eleman ilk çıkarılır. Yığın yapısı, geri alma (undo) işlemleri veya fonksiyon çağrılarını takip etmek için kullanışlıdır.

C#

using System.Collections.Generic;

Stack sayilar = new Stack();
sayilar.Push(10);
sayilar.Push(20);

int sonSayi = sayilar.Pop(); // Son sayıyı (20) alır ve yığından çıkarır.

Koleksiyon Metotları ve Özellikleri

Koleksiyonların birçoğu ortak metot ve özelliklere sahiptir. İşte bazıları:

  • Add(T item): Koleksiyona bir eleman ekler.
  • Remove(T item): Koleksiyondan bir eleman siler.
  • Contains(T item): Koleksiyonda belirli bir elemanın olup olmadığını kontrol eder.
  • Count: Koleksiyondaki eleman sayısını döndürür.
  • Clear(): Koleksiyondaki tüm elemanları siler.

Dizi ve Koleksiyon Seçimi

Dizi mi yoksa koleksiyon mu kullanacağınız, uygulamanızın gereksinimlerine bağlıdır. Eğer boyutun önceden bilindiği ve değişmeyeceği durumlarda diziler daha performanslı olabilir. Ancak, boyutun dinamik olarak değiştiği ve daha fazla esneklik gerektiği durumlarda koleksiyonlar daha uygun olacaktır.

Örneğin, bir sınavdaki öğrenci sayısının sabit olduğu durumlarda bir dizi kullanılabilirken, bir sosyal medya uygulamasındaki kullanıcıların listesi sürekli değiştiği için bir koleksiyon kullanmak daha mantıklıdır.

Sonuç

C# dilindeki diziler ve koleksiyonlar, verileri düzenli bir şekilde saklamak ve yönetmek için güçlü araçlardır. Diziler, sabit boyutlu ve aynı türden veriler için idealdirken, koleksiyonlar dinamik boyutlu ve farklı türden veriler için daha fazla esneklik sunar. Uygulamanızın gereksinimlerine uygun olarak, dizileri veya koleksiyonları kullanarak daha verimli ve düzenli kod yazabilirsiniz. Özellikle List<T> ve Dictionary<TKey, TValue> gibi generic koleksiyonlar, performansı artırmak ve kodun okunabilirliğini sağlamak için sıklıkla tercih edilmelidir.

İlk yorum yapan olun

Bir yanıt bırakın

E-posta hesabınız yayımlanmayacak.


*