C# Dictionary'yi Anlamak
C#'ta sıklıkla altı çizilmeyen güçlü bir veri yapısı, dictionary'dir. Dictionary sınıfı, System.Collections.Generic ad alanında bulunan bir genel koleksiyondur. "The Dictionary Data Structure in C# in 10 Minutes or Less" başlıklı videosunda, Tim Corey, C# uygulamalarınızda dictionary'leri etkili bir şekilde nasıl kullanacağınıza dair özlü ve pratik bir rehber sunar. Bu makale, Tim'in açıklamalarını ve örneklerini parçalayarak, C# dictionary'nin olmazsa olmazlarını kolaylıkla kavramanıza yardımcı olmayı amaçlar.
Dictionary'lere Giriş
Tim, C#'ta dictionary kavramını tanıtarak başlar. Bunu bir kelimeyi (anahtar) bulmak için başvurduğunuz bir gerçek yaşam sözlüğü ile karşılaştırır ve tanımını (değer) bulursunuz. C#'ta, bir dictionary, her anahtarın benzersiz olduğu ve null olamayacağı anahtar-değer çiftlerinin bir koleksiyonudur.
Dictionary Oluşturma
C# dilinde bir sözlük, Dictionary<TKey, TValue> sözdizimi kullanılarak tanımlanır ve bu, anahtar-değer çiftleriyle etkili veri depolama ve alma işlemleri sağlar. Varsayılan başlangıç kapasitesi, başlatma sırasında ayarlanmış olup, dictionary elemanlar eklendikçe dinamik olarak ayarlanabilir.
Tim, (0:28)'de, bir dictionary oluşturmayı göstermek için temel bir konsol uygulaması ile başlayarak: Anahtarlar olarak tam sayıların ve değerler olarak stringlerin kullanıldığı bir dictionary başlatmak için aşağıdaki kodu kullanır:
// Declare a dictionary with integer keys and string values
Dictionary<int, string> rookieOfTheYear = new Dictionary<int, string>();// Declare a dictionary with integer keys and string values
Dictionary<int, string> rookieOfTheYear = new Dictionary<int, string>();Burada, Dictionary<int, string> anahtarların tamsayılar (int) ve değerlerin stringler (string) olacağını belirtir. rookieOfTheYear değişkeni, sözlük örneğinin adıdır. Anahtar türünü string olarak ayarlayarak string anahtarlar da kullanabilirsiniz.
Dictionary'ye Eleman Ekleme
Tim şimdi (2:08)'de dictionary'ye eleman ekler. O, anahtar-değer çiftleri eklemek için Add yöntemini nasıl kullanacağını gösteriyor:
// Add entries to the dictionary
rookieOfTheYear.Add(2000, "Mike Miller");
rookieOfTheYear.Add(2001, "Jane Doe");
rookieOfTheYear.Add(2002, "Jane Doe");
rookieOfTheYear.Add(2003, "John Smith");// Add entries to the dictionary
rookieOfTheYear.Add(2000, "Mike Miller");
rookieOfTheYear.Add(2001, "Jane Doe");
rookieOfTheYear.Add(2002, "Jane Doe");
rookieOfTheYear.Add(2003, "John Smith");Bu örnekte:
rookieOfTheYear.Add(2000, "Mike Miller"), belirtilen2000anahtarına"Mike Miller"değerini ekler.- Benzer şekilde,
2001,2002ve2003anahtarları sırasıyla"Jane Doe","Jane Doe"ve"John Smith"ile ilişkilendirilmiştir.
Değerlerin tekrarlanabileceğini, fakat anahtarların benzersiz olması gerektiğini belirtir. Çift anahtar ekleme girişimi bir istisnaya neden olur:
rookieOfTheYear.Add(2001, "Jane Doe"); // This will throw an exceptionrookieOfTheYear.Add(2001, "Jane Doe"); // This will throw an exceptionBu istisna, 2001 anahtarının sözlükte zaten bulunmasından kaynaklanır.
Dictionary Elemanlarına Erişim
Tim, (3:45)'te değer alımını göstermek için şu satırda kodu kullanır:
// Accessing a value with a specific key
Console.WriteLine(rookieOfTheYear[2002]); // Outputs: Jane Doe// Accessing a value with a specific key
Console.WriteLine(rookieOfTheYear[2002]); // Outputs: Jane DoeBurada, rookieOfTheYear[2002], 2002 anahtarıyla ilişkilendirilmiş değere erişir. Bu, anahtarlara dayalı değerlerin bulunması için çok verimli bir yoldur.

Anahtar Varlığını Kontrol Etme
(4:29)'da Tim, ContainsKey yöntemiyle bir anahtarın sözlükte olup olmadığını nasıl kontrol edeceğini tartışıyor:
// Check if a key exists before accessing its value
if (rookieOfTheYear.ContainsKey(2002))
{
Console.WriteLine(rookieOfTheYear[2002]);
}// Check if a key exists before accessing its value
if (rookieOfTheYear.ContainsKey(2002))
{
Console.WriteLine(rookieOfTheYear[2002]);
}Yukarıdaki örnekte, ContainsKey(2002), 2002 anahtarının sözlükte olup olmadığını kontrol eder. Eğer varsa, bu anahtarın karşıladığı değer ("Jane Doe") yazdırılır.
Anahtar mevcut değilse, dictionary, var olmayan anahtarlara erişim hatalarından kaçınmak için hiçbir çıktı sağlamaz.
Dictionary Yeteneklerini Genişletme
Tim, (5:33)'ta dictionary yeteneklerini genişleterek, stringlerin string listeleriyle eşleştirildiği daha karmaşık bir örnek oluşturur:
// Declare a dictionary with string keys and List<string> as values
Dictionary<string, List<string>> wishList = new();
// Add entries to the dictionary with lists as values
wishList.Add("Tim Corey", new List<string> { "Xbox", "Tesla", "Pizza" });
wishList.Add("Billy Bob", new List<string> { "PS5", "Ford", "Hoagie" });
wishList.Add("Mary Jane", new List<string> { "House", "Car", "Sub" });// Declare a dictionary with string keys and List<string> as values
Dictionary<string, List<string>> wishList = new();
// Add entries to the dictionary with lists as values
wishList.Add("Tim Corey", new List<string> { "Xbox", "Tesla", "Pizza" });
wishList.Add("Billy Bob", new List<string> { "PS5", "Ford", "Hoagie" });
wishList.Add("Mary Jane", new List<string> { "House", "Car", "Sub" });Burada:
Anahtarlar stringlerdir (ör: "Tim Corey", "Billy Bob", "Mary Jane").
- Değerler, her kişi için bir dilek listesini temsil eden string listeleridir.
Dictionary Üzerinde İterasyon Yapma
(7:24)'te Tim, bir foreach döngüsü kullanarak bir sözlük üzerinde nasıl iterasyon yapılacağını gösteriyor:
// Iterate over each key-value pair in the dictionary
foreach (var (key, value) in wishList)
{
Console.WriteLine($"{key}'s wish list:");
// Iterate over each item in the list of values
foreach (var item in value)
{
Console.WriteLine($"\t{item}");
}
}// Iterate over each key-value pair in the dictionary
foreach (var (key, value) in wishList)
{
Console.WriteLine($"{key}'s wish list:");
// Iterate over each item in the list of values
foreach (var item in value)
{
Console.WriteLine($"\t{item}");
}
}Bu örnekte:
foreach (var (key, value) in wishList),wishListsözlüğündeki her anahtar-değer çifti üzerinde iterasyon yapar.key, anahtarı ifade eder (ör. "Tim Corey").value, bu anahtara bağlı değerler listesini ifade eder.- İç döngü listedeki her bir öğe üzerinde döngü yapar ve onu yazdırır.
Bu, belirli bir anahtar ve bununla ilişkili belirli değer kullanarak dictionary elemanlarını birer birer erişmek ve yazdırmak için bir döngü kullanmayı sağlar. İşte çıktı:

Daha Karmaşık Değerlere Erişim
Tim ayrıca (8:26)'ta dictionary'deki daha karmaşık değerlere, belirtilen dizini açıkça kullanarak nasıl erişileceğini gösterir:
// Access the first item in the list of values for the specified key
Console.WriteLine(wishList["Tim Corey"][0]); // Outputs: Xbox// Access the first item in the list of values for the specified key
Console.WriteLine(wishList["Tim Corey"][0]); // Outputs: XboxBurada, wishList["Tim Corey"], "Tim Corey" anahtarına bağlı listeye erişir ve [0] bu listedeki ilk öğeyi alır.
Sonuç
Tim, (9:00)'da, dictionary'leri anlamanın önemini vurgulayarak sonuçlandırır. Her ne kadar dictionary'ler sık kullanılmasa da, benzersiz anahtarlar ve verimli aramalar gerektiren senaryolar için inanılmaz derecede kullanışlı olduğunu belirtir.
Belirgin Çıkarımlar
Dictionary Oluşturma: Çeşitli veri türleri ile dictionary'leri nasıl başlatacağınızı anlayın.
Eleman Ekleme: Benzersiz anahtarların önemini ve çift anahtar istisnalarını nasıl yöneteceğinizi öğrenin.
Değerlere Erişim: Anahtarları kullanarak değerleri verimli bir şekilde alın.
Anahtar Varlığını Kontrol Etme: Değerlere erişmeden önce anahtarın varlığını kontrol ederek hataları önleyin.
İleri Düzey Kullanım: Değerlerle listelerin olduğu gibi daha karmaşık dictionary'ler uygulayın.
- Yineleme: Bir döngü kullanarak bir dictionary'deki tüm elemanlara erişin ve görüntüleyin.
Tim Corey'nin videosunu izleyerek, C#'ta dictionary kullanmayı ustalıkla öğrenebilir, verimli veri alımı ve depolama gerektiren senaryolar için programlama araç takımınızı geliştirebilirsiniz. C# hakkında daha fazla bilgi verici video için Tim'in kanalına göz atın.


