31 Ekim 2013 Perşembe

C# Jenerik Koleksiyonlar

List<T> Koleksiyonu

class Program
    {
        static void Main(string[] args)
        {
            int[] sayilar = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
            List<int> liste = new List<int>(); //içeride sadece integer tipinden nesneler olabilir.

            foreach (int sayi in sayilar)
            {
                liste.Add(sayi); // Add metodu bizden integer beklediği için boxing olayı meydana gelmez.
            }

            int[] yeniDizi = new int[sayilar.Length];

            for (int i = 0; i < yeniDizi.Length; i++)
            {
                yeniDizi[i] = liste[i]; //listenin içerisindeki her bir eleman object olduğundan cast işlemi yapmak zorundayız.
            }

            foreach (int sayi in yeniDizi)
            {
                Console.WriteLine(sayi); //iterasyon yaparken int harici bir tip kullanırsak derleme zamanı hatası alırız. Ancak ArrayList kullanırsak çalışma zamanı hatası alırız. List kullanımı, bizi doğru tip ile iterasyon yapmaya zorlamış olur, dolayısı ile çalışma zamanında hata almayız.
            }
        }
    }

Yaptığımız örnek üzerinden konuşursak, List tipinin ArrayList’e göre daha kullanışlı olduğunu söyleyebiliriz. Ancak tekrar etmekte fayda var, her zaman ihtiyaçlarımız doğrultusunda en uygun tipi kullanmalıyız. List’in daha kullanışlı olduğunu bu örnek için belirttiğimiz hatırlatmakta fayda var.



Dictionary<T,T> Koleksiyonu

Bu koleksiyonların en önemli farkı, içeride tutulan her bir elemanın, aynı zamanda bir key değerine sahip olmasıdır. Zaten okumayı da index yerine, bu key değerleri ile yapmaktayız. Dictionary sınıfı generic bir sınıf olduğundan ötürü, bu sınıfın nesnesini örneklerken içeride tutulacak elemanın ve bu elemanın key değerinin tipini belirleme işini ihtiyacımız doğrultusunda gerçekleştirebiliriz. Daha anlaşılabilir olması açısından basit bir örnek ile incelemeye çalışalım.

Dictionary sınıfınının nesne örneğini oluştururken aşağıdaki tablo ile karşılaşacağız.



Gördüğümüz TKey parametresi, index yerine okuma yapacağız key değerinin tipini belirtir. TValue ise, içeride tutulacak elemanların tipini belirtir.

Bu nesne örneğini oluşturup içerisine elemanlar ekleyelim.
class Program
    {
        static void Main(string[] args)
        {
            //TKey parametresi, okuma yapmamızı sağlayan key değerinin tipidir. Burada integer olarak belirttik.
            //TValue parametresi, içeride tutulan elemanın tipini belirtir. Biz burada stringler tutacağımızı belirttik.
            Dictionary<int, string> koleksiyon = new Dictionary<int, string>();

            koleksiyon.Add(34, "istanbul");
            koleksiyon.Add(35, "izmir");
            koleksiyon.Add(16, "bursa");
            koleksiyon.Add(10, "balıkesir");
            koleksiyon.Add(41, "kocaeli");

        }
    }

Şu an koleksiyon içerisinde 5 adet string tipinden eleman mevcuttur. Bu elemanlarla birilikte integer tipinden birer key değeri de bulunmaktadır. Koleksiyon içerisinden okuma yapmak istersek;


Alıştığımız index yapısından farklı olarak, key değeri ile okuma yapıldığını da yukarıda görmemiz mümkündür. int tipinden key alarak, geriye aldığı o key ile eşleşen elemanı döndürür.

Son olarak okuma işlemini gerçekleştirelim. Kodun son hali aşağıdaki gibidir.
class Program
    {
        static void Main(string[] args)
        {
            //TKey parametresi, okuma yapmamızı sağlayan key değerinin tipidir. Burada integer olarak belirttik.
            //TValue parametresi, içeride tutulan elemanın tipini belirtir. Biz burada stringler tutacağımızı belirttik.
            Dictionary<int, string> koleksiyon = new Dictionary<int, string>();

            koleksiyon.Add(34, "istanbul");
            koleksiyon.Add(35, "izmir");
            koleksiyon.Add(16, "bursa");
            koleksiyon.Add(10, "balıkesir");
            koleksiyon.Add(41, "kocaeli");

            int[] plakaListesi = { 34, 35, 16, 10, 41 };

            for (int i = 0; i < plakaListesi.Length; i++)
            {
                int keyDegeri = plakaListesi[i];
                Console.WriteLine(koleksiyon[keyDegeri]);
            }
        }
    }

Ekran çıktısı aşağıdaki gibi olacaktır.




Hiç yorum yok:

Yorum Gönder