Dictionary<K,V> derinlemesine
Dictionary<K,V>'nin hashing ve çakışma davranışını öğrenirsin.
Dictionary<K,V> derinlemesine
Bir Dictionary<K,V> anahtarları bir kova (bucket) dizisine yerleştirir. Her anahtarın GetHashCode() sonucu bir kova indeksi verir; aynı kovaya düşen anahtarlar zincirleme listesinde tutulur.
İki farklı anahtar aynı kovaya düşerse buna çakışma (collision) denir. Çakışma normaldir; liste içinde anahtar Equals ile karşılaştırılır. İyi bir hash işlevi çakışmaları azaltır ve aramayı hızlı tutar.
Add, indexer ve TryGetValue
Add metodu yeni bir anahtar-değer çifti ekler; anahtar varsa ArgumentException fırlatılır. prices["elma"] = 5 yazarsan var olan değerin üzerine yazar, hata vermez.
Bir anahtarın varlığını kontrol etmek için ContainsKey ya da TryGetValue kullan. TryGetValue tek geçişte hem varlığı kontrol eder hem değeri verir; iki kez arama yapmaz.
Uygulama TryGetValue ile değer ara
Aşağıdaki prices sözlüğü hazırdır. TryGetValue ile "elma" anahtarını ara; bulunduysa değeri Console.WriteLine ile yazdır.
Örnek çözümü göster
int value; bildirip TryGetValue çağır, true dönerse value'yu yazdır.
Örnek çözüm:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var prices = new Dictionary<string, int>();
prices.Add("elma", 5);
prices.Add("armut", 3);
int value;
if (prices.TryGetValue("elma", out value))
{
Console.WriteLine(value);
}
}
}
Kendini test et
-
TryGetValue çağrısını tamamla
prices.TryGetValue("elma", out____);Cevabı göster
prices.TryGetValue("elma", outint value); -
Add ile var olan anahtarı eklersen?
- Değer güncellenir
- Hata fırlatılır
- Yok sayılır
- Üzerine yazılır
Cevabı göster
Hata fırlatılır — Doğru. Add metodu var olan anahtarda ArgumentException fırlatır.
-
Metodu davranışa eşle
- TryGetValue
- Varsa değeri verir
- ContainsKey
- Anahtar var mı
- Add
- Çakışınca hata fırlatır
- [] indexer
- Üzerine yazar