CodeBlanks Logo Icon CodeBlanks

Dictionary<K,V> derinlemesine

C# kursu · Orta seviye · Ders 77/116

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

  1. TryGetValue çağrısını tamamla

    prices.TryGetValue("elma", out____);
    Cevabı göster
    prices.TryGetValue("elma", outint value);
  2. 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.

  3. Metodu davranışa eşle

    TryGetValue
    Varsa değeri verir
    ContainsKey
    Anahtar var mı
    Add
    Çakışınca hata fırlatır
    [] indexer
    Üzerine yazar

Orta seviye bölümündeki tüm dersler