0Pricing
C# Academy · Ders

Sözlük Aramaları

Hızlı anahtar-değer erişimi.

Sözlük Aramaları, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.

Anahtar-Değer Çiftleri

Dictionary<TKey, TValue>, benzersiz anahtarları değerlere eşler. Bunu bir arama tablosu gibi düşünün: bir anahtar verin, değeri hızlıca geri alın.

Temelinde bir karma tablosu bulunduğundan, anahtara göre değer bulma ortalama O(1) maliyetindedir ve bir listeyi taramaktan çok daha hızlıdır.

using System.Collections.Generic;

var ages = new Dictionary<string, int>();
ages["Ann"] = 30;
ages["Bob"] = 25;

Sözlük Başlatma

Bir sözlüğü koleksiyon başlatıcısıyla başlangıç değerleriyle doldurabilirsiniz. Her giriş bir anahtarı kendi değeriyle eşleştirir.

Anahtarlar benzersiz olmalıdır. Aynı anahtarı bir başlatıcıda iki kez vermek, çalışma zamanında bir ArgumentException oluşturur.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var caps = new Dictionary<string, string> {
            ["FR"] = "Paris",
            ["JP"] = "Tokyo"
        };
        Console.WriteLine(caps["JP"]);
    }
}

Anahtara Göre Okuma

dict[key] okumak için indeksleyiciyi kullanın. Bu işlem ortalama olarak O(1) maliyetindedir.

Ancak dikkatli olun: anahtar eksikse indeksleyici KeyNotFoundException fırlatır. Mevcut olmayan bir anahtarı okumak, sözlüklerdeki en yaygın hatalardan biridir.

var ages = new Dictionary<string, int> { ["Ann"] = 30 };
int a = ages["Ann"];      // 30
// int b = ages["Zoe"];   // throws KeyNotFoundException

TryGetValue ile Güvenli Arama

TryGetValue özel durumları önler. Anahtar mevcut olduğunda true döndürür ve bir out değişkenine değer atar; aksi durumda false döndürür.

Bu, emin olmadığınız bir değeri aramanın C# diline özgü, ek bellek ayırmayan yoludur.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var ages = new Dictionary<string, int> { ["Ann"] = 30 };
        if (ages.TryGetValue("Ann", out int v))
            Console.WriteLine(v);
    }
}

ContainsKey ve Varsayılanlar

ContainsKey, değeri okumadan bir anahtarın varlığını O(1) maliyetle denetler. Yalnızca evet veya hayıra ihtiyacınız olduğunda, indeksleyiciyle okuma yapmadan önce bunu kullanın.

Hem ContainsKey hem de indeksleyiciyi çağırırsanız anahtarı iki kez karma işleminden geçirirsiniz. TryGetValue bunu bir kez yaptığı için genellikle daha hızlıdır.

var ages = new Dictionary<string, int> { ["Ann"] = 30 };
if (ages.ContainsKey("Ann"))
    System.Console.WriteLine(ages["Ann"]);

Ekleme ve Atama Karşılaştırması

dict[key] = value indeksleyicisi yeni bir çift ekler veya mevcut bir çiftin üzerine yazar. Add(key, value) ise yalnızca ekleme yapar; anahtar zaten varsa özel durum fırlatır.

Yinelenen bir anahtarın hata olması gerektiğinde Add kullanın; üzerine yazılması sorun değilse indeksleyiciyi kullanın.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var d = new Dictionary<string, int>();
        d["x"] = 1;
        d["x"] = 2;     // overwrite, fine
        Console.WriteLine(d["x"]);
    }
}

Girdileri Kaldırma

Remove(key) bir çifti siler ve anahtar mevcutsa ortalama O(1) maliyetle true döndürür.

Bir aşırı yükleme, kaldırılan değeri bir out parametresiyle döndürür. Değeri tek adımda hem silmek hem de kullanmak istediğinizde bu oldukça kullanışlıdır.

var d = new Dictionary<string, int> { ["a"] = 1, ["b"] = 2 };
bool removed = d.Remove("a");   // true
bool again = d.Remove("a");     // false

Çiftler Üzerinde Yineleme

Döngü, KeyValuePair<TKey, TValue> öğeleri üretir. Temiz bir kod için bunları bir anahtara ve değere ayırarak yapılarını çözün.

Numaralandırma sırası garanti edilmez; girdilerin eklenme sırasına asla güvenmeyin. Yalnızca bir taraf üzerinde yineleme yapmak için Keys veya Values kullanın.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var d = new Dictionary<string, int> { ["a"] = 1, ["b"] = 2 };
        foreach (var (key, val) in d)
            Console.WriteLine($"{key}={val}");
    }
}

Dictionary ile Sayma

Klasik bir kullanım, oluşumları saymaktır. Her öğe için sayacını artırın; öğe yeniyse saymaya sıfırdan başlayın.

Her arama ve güncelleme O(1) olduğundan bu örüntü n öğe için O(n) maliyetinde çalışır. Bir listeyi her seferinde tarasaydınız maliyet O(n kare) olurdu.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var counts = new Dictionary<char, int>();
        foreach (char c in "banana")
            counts[c] = counts.GetValueOrDefault(c) + 1;
        Console.WriteLine(counts['a']);
    }
}

Anahtar Eşitliği Önemlidir

Aramalar, anahtar türünün GetHashCode ve Equals üyelerine dayanır. Yerleşik türler ve string kutudan çıktığı gibi çalışır.

Özel sınıf anahtarlarında her iki yöntemi de geçersiz kılın veya bir record kullanın; aksi takdirde eşit görünen iki anahtar farklı karma değerlerine sahip olur ve aramalar başarısız olur.

var byName = new Dictionary<string, int>(
    System.StringComparer.OrdinalIgnoreCase);
byName["Hi"] = 1;
bool found = byName.ContainsKey("HI"); // true

Değer Türü Seçme

Değerler, listeler dahil her şey olabilir. Dictionary<string, List<int>>, birçok değeri tek bir anahtar altında gruplar.

Böyle bir yapıya ekleme yaparken ilk kullanımda iç listeyi oluşturun, ardından ona ekleme yapın. Böylece gruplandırılmış, çok değerli bir eşleme oluşturulur.

var groups = new Dictionary<string, List<int>>();
void Add(string k, int v) {
    if (!groups.TryGetValue(k, out var list))
        groups[k] = list = new List<int>();
    list.Add(v);
}

Hızlı Kontrol

Muhtemelen eksik olan bir anahtarı okumanın en güvenli yolunu seçin.

Özet

Dictionary<K,V>, karma tablosuyla desteklenir ve anahtara göre ortalama O(1) maliyetle arama, ekleme ve kaldırma olanağı sunar.

Özel durum fırlatan indeksleyici yerine TryGetValue kullanmayı tercih edin, anahtarları benzersiz tutun ve özel anahtar türlerinin uygun eşitlik ve karma işlemlerini uyguladığından emin olun. Yineleme sırası tanımsızdır.

Sıkça Sorulan Sorular

“Sözlük Aramaları” dersi ücretsiz mi?

Evet — “Sözlük Aramaları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.

“Sözlük Aramaları” dersinde ne öğreneceğim?

Hızlı anahtar-değer erişimi. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C# Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Sözlük Aramaları” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Uygulamada Liste
  2. Sözlük Aramaları
  3. HashSet ve Benzersizlik
  4. Koleksiyon Seçme
← C# Academy Sayfasına Dön