19 Oca 2016

C#'da Dictionary Kullanımı

Eğer elimizde anahtar ile tanımlayabileceğimiz bir liste varsa, bu liste elemanları içinde hızlı arama yapmak istiyorsak, dictionary kullanarak değerlere ulaşma performasını arttırabiliriz. Dictionary, her satırı içerisinde bir anahtar (key) ve bir de değer (value) içerir. Anahtarlar değerler ile birebir eşleşir ve bir dictionary içinde her anahtardan bir tane olabilir. List’ler gibi generic bir sınıftır. Aşağıdaki gibi 2 farklı şekilde tanımlanır;
Dictionary<string, int> d = new Dictionary<string, int>(5); //kapasite tanımlama List’lerdeki gibi geçerlidir. <> içindeki ilk tip key, ikinci tip value tipini belirlemek için kullanılır.
d.Add(“Fizik”, 100);
d.Add(“Matematik”, 70);
d.Add(“Türkçe”, 80);
Console.WriteLine(d[“Türkçe”]); //Anahtar ile arama yapmadan değere ulaştık.

Dictionary<int, string> musteriler = new Dictionary<int, string>(10)
{
     {10, "Ahmet Bey"},
     {11, "Mehmet Bey"},
     {12, "Ayşe Hanım"}
}
Console.WriteLine(musteriler[10]);
musteriler.Add(13, "Fatma Hanım");
musteriler[11] = "Serkan Bey"; //Anahtarını bildiğimiz müşterinin değerini değiştirdik. List kullansaydık bütün değerler içinde önce Mehmet Bey aratıp indeksini bulup daha sonra değiştirebilirdik.
foreach (KeyValuePair<int, string> musteri in musteriler)
{
     Console.WriteLine("Müşteri No: " + musteri.Key + " Adı: " + musteri.Value);
}
foreach döngüsünü şöyle okumalıyız: "Müşteriler içindeki her müşteri için konsola müşterinin key ve value değerlerini yazdırıyoruz.
  • Dictionary’ler de Add, Remove, Contains, Clear, CopyTo metodlarını içerirler.
  • Bir müşterinin dictionary’mizde olup olmadığını araştırmak için;
bool a = musteriler.Contains(new KeyValuePair<int, string>(10, "Ahmet Bey"));//anahtar ve değer kontrolü
bool b = musteriler.ContainsKey(10); //sadece anahtar kontrolü
bool c = musteriler.ContainsValue("Ahmet Bey"); //sadece değer kontrolü
  • Bilmediğimiz bir key’i aramak için alttaki ifadeyi kullanmalıyız.
string value;
bool result = musteriler.TryGetValue(5, out value); //TryGetValue öncelikle o key dicitonary'de var mı diye kontrol eder, yoksa value'nin değeri null olarak kalır.

2 yorum: