Serdar YILMAZ
Bizimkisi Bir “Bug” Hikayesi...
Serdivan/Sakarya
Serdar Yılmaz C# – Dictionary Sınıfı

C# – Dictionary Sınıfı

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

  1. 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);
  2. 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");
  3. Clear() Metodu
    Koleksiyon içerisinde yer alan tüm Anahtar-Değer çiftlerini silmektedir.

    Ogrenci.Clear();
  4. Count Özelliği
    Koleksiyon içinde bulunan anahtar/değer çiftlerinin sayısını döndürmektedir.

    int ElemanSayisi = Ogrenci.Count;
  5. 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);
  6. 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); 
    
  7. 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);
    
  8. 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);
    
  9. 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


Bu İçeriği Arkadaşlarınızla Paylaşmak İster misiniz?

2 Yorum

Bir Yorum Yapın