“C# – Koleksiyonlar” başlıklı yazımızda koleksiyonların avantajlarından, dezavantajlarından bahsedip, genel bir bilgi vermiştik. Bu yazımızda ise bir koleksiyon sınıfı olan Dictionary‘den bahsedeceğiz.
Dinamik Boyut
Standart diziler sabit boyutludur; programlama aşamasında dizinin boyutu belirtilir ve programın çalışması sırasında değiştirilemez. Dictionary ise değişken boyutludur. Eleman ekleme ve çıkarma durumuna göre boyutu dinamik olarak değişmektedir.
Dictionary Sınıfının Temel Yapısı
Standart dizilere eklenen elemanlar, belleğe sıralı bir şekilde yerleştirilmektedir. Sıfırdan başlanarak her bir elemana birer indeks değeri verilip, elemanlara o indeksler aracılığıyla erişmemiz sağlanmaktaydı. Koleksiyon sınıflarından biri olan ArrayList içinde aynı durum söz konusu. ArrayList’e eklenen her bir elemana indeks numarasıyla erişe bilmekteyiz.
Dictionary koleksiyonunda ise Anahtar(Key) ve Değer(Value) olmak üzere iki kavram karşımıza çıkmakta. Konuyu daha anlaşılır kılmak açısından; standart dizilere eklediğimiz elemanları Değer, o elemanlara erişmek için kullandığımız indeksleri de Anahtar olarak düşünebilirsiniz.
Her bir Değerin farklı bir Anahtarı olmalıdır yani koleksiyon içerisinde yer alan Anahtarlar birbirinden farklı olmalıdır.
Dictionary sınıfından bir nesne oluştururken, anahtar ve değerin veri tiplerini belirtmemiz gerekmekte. Aşağıdaki kod satırında, Key_Tipi yerine Anahtarın veri tipini, Value_Tipi yerine de Değerin verini tipini belirtmeliyiz.
Dictionary<Key_Tipi, Value_Tipi> Referans_Adi = new Dictionary<Key_Tipi, Value_Tipi>();
Şimdi, başlangıç seviyesinde basit bir C# konsol uygulaması hazırlayarak Dictionary Sınıfı incelemeye devam edelim.
Dictionary<int, string> Ogrenci = new Dictionary<int, string>(); Ogrenci.Add(134, "Tolga Demirer"); Ogrenci.Add(158, "Ümit Özkan"); Ogrenci.Add(115, "Kadir Aydemir"); Ogrenci.Add(174, "Cemal Çiftçi"); Console.Write("Öğrenci No Giriniz:"); int No = int.Parse(Console.ReadLine()); try { Console.WriteLine(Ogrenci[No]); } catch { Console.WriteLine("Öğrenci Bulunamadı."); }
Yukarıdaki örneğimizi açıklayacak olursak; Öğrenci numarası girildiğinde, ilgili öğrencinin adı-soyad bilgilerini ekrana yazdıran bir uygulama hazırladık. Öğrencinin numarasını Anahtar, ad-soyad bilgisini de Değer olarak tuttuk. Bu yüzden Anahtarın veri tipini int, Değerin veri tipini de string olarak belirttik.
Klavyeden girilen numarada bir öğrenci koleksiyon içerisinde mevcut ise ad-soyad bilgileri ekrana yazdırılacaktır. Eğer mevcut değilse “KeyNotFoundException” şeklinde bir hata döndürecektir, bu durumda try bloğu içerisinde çıkıp, catch bloğu içerisine girecektir program ve ekrana “Öğrenci Bulunamadı” yazacaktır.
Metotlar ve Özellikler
- ContainsKey(Aranan_Key) Metodu
Koleksiyon içerisinde, parametre olarak girilen değerde bir Anahtar (Key) mevcutsa TRUE değilse FALSE döndürecektir.bool varmi = Ogrenci.ContainsKey(158);
- ContainsValue(Aranan_Value) Metodu
Koleksiyon içerisinde, parametre olarak girilen değerde bir Değer (Value) mevcutsa TRUE değilse FALSE döndürecektir.bool varmi = Ogrenci.ContainsValue("Kadir Aydemir");
- Clear() Metodu
Koleksiyon içerisinde yer alan tüm Anahtar-Değer çiftlerini silmektedir.Ogrenci.Clear();
- Count Özelliği
Koleksiyon içinde bulunan anahtar/değer çiftlerinin sayısını döndürmektedir.int ElemanSayisi = Ogrenci.Count;
- Remove(Silinecek_Key) Metodu
Koleksiyon içerisinde, parametre olarak girilen değerde bir Anahtar (Key) mevcutsa; Anahtarı ve anahtarla ilişkili Değeri silip TRUE döndürecektir. Anahtar mevcut değilse FALSE döndürecektir.bool SilindiMi = Ogrenci.Remove(1558);
- Keys Özelliği
Anahtarları (Keys) içeren bir koleksiyon döndürmektedir.Dictionary<int, string> Ogrenci = new Dictionary<int, string>(); Ogrenci.Add(134, "Tolga Demirer"); Ogrenci.Add(158, "Ümit Özkan"); Ogrenci.Add(115, "Kadir Aydemir"); Ogrenci.Add(174, "Cemal Çiftçi"); Dictionary<int, string>.KeyCollection AnahtarListesi = Ogrenci.Keys; foreach (int Anahtar in AnahtarListesi) Console.WriteLine(Anahtar);
- Values Özelliği
Değerleri (Values) içeren bir koleksiyon döndürmektedir.Dictionary<int,string> Ogrenci = new Dictionary<int,string>(); Ogrenci.Add(134, "Tolga Demirer"); Ogrenci.Add(158, "Ümit Özkan"); Ogrenci.Add(115, "Kadir Aydemir"); Ogrenci.Add(174, "Cemal Çiftçi"); Dictionary<int,string>.ValueCollection DegerListesi = Ogrenci.Values; foreach (string Deger in DegerListesi) Console.WriteLine(Deger);
- KeyValuePair<Key_Tipi, Value_Tipi> Yapısı
Bu yapı koleksiyon içerisinde yer alan Anahtar-Değer çiftlerini tutmaktadır.Dictionary<int,string> Ogrenci = new Dictionary<int,string>(); Ogrenci.Add(134, "Tolga Demirer"); Ogrenci.Add(158, "Ümit Özkan"); Ogrenci.Add(115, "Kadir Aydemir"); Ogrenci.Add(174, "Cemal Çiftçi"); foreach (KeyValuePair<int, string> veri in Ogrenci) Console.WriteLine("Numara:{0} - İsim:{1}", veri.Key, veri.Value);
- TryGetValue(a ,out b) Metodu
Koleksiyon içerisinde “a” anahtarını mevcutsa; “a” anahtarı ile ilişkili Değeri “b” değişkenine aktarıp TRUE döndürmektedir. Anahtar mevcut değilse FALSE döndürecektir.Dictionary<int, string> Ogrenci = new Dictionary<int, string>(); Ogrenci.Add(134, "Tolga Demirer"); Ogrenci.Add(158, "Ümit Özkan"); Ogrenci.Add(115, "Kadir Aydemir"); Ogrenci.Add(174, "Cemal Çiftçi"); Console.Write("Öğrenci No Giriniz:"); int No = int.Parse(Console.ReadLine()); string isim = " "; if (Ogrenci.TryGetValue(No, out isim)) Console.WriteLine(isim); else Console.WriteLine("Öğrenci Bulunamadı.");
Yazar:Serdar YILMAZ
eyw
Çok teşekkürler Hocam. Örneğiniz ve açıklamalarınız çok açıklayıcıydı.
Elinize sağlık açıklayıcı olmuş. 🙂
Emeğinize sağlık 🙂
Ellerinize sağlık güzel ve açıklayıcı olmuş 🙂
Ellerine sağlık hocam
Elinize sağlık
Elinize Sağlık
Teşekkürler,güzel yazı
Teşekkürler, gayet güzel açıklanmış…
Kolay anlaşılır şekilde anlattığınız için çok teşekkürler 🙂
Teşekkürler. Açıklayıcı bir yazı olmuş.