Soruyu cevaplamak için önce bir sözlüğün amacına ve altında yatan teknolojiye bakmamız gerekir.
Dictionary
KeyValuePair<Tkey, Tvalue>
her bir değerin benzersiz anahtarıyla temsil edildiği yerin listesidir . Diyelim ki en sevdiğiniz yiyeceklerin bir listesi var. Her bir değer (yemek adı) benzersiz anahtarı ile temsil edilir (bir konum = bu yiyeceği ne kadar sevdiğiniz).
Örnek kod:
Dictionary<int, string> myDietFavorites = new Dictionary<int, string>()
{
{ 1, "Burger"},
{ 2, "Fries"},
{ 3, "Donuts"}
};
Diyelim ki sağlıklı kalmak istiyorsunuz, fikrinizi değiştirdiniz ve en sevdiğiniz "Burger" ı salata ile değiştirmek istiyorsunuz. Listeniz hala favorilerinizin bir listesidir, listenin doğasını değiştirmeyeceksiniz. Favoriniz listede bir numara olarak kalacak, sadece değeri değişecek. Bunu aradığın zamandır:
/*your key stays 1, you only replace the value assigned to this key
you alter existing record in your dictionary*/
myDietFavorites[1] = "Salad";
Ancak programcı olduğunuzu unutmayın ve bundan sonra cümleleri ile bitirirsiniz; emojiyi kullanmayı reddediyorsunuz çünkü derleme hatası veriyorlar ve tüm sık kullanılanlar listesi 0 dizin tabanlıdır.
Diyetiniz de değişti! Yani listenizi yeniden değiştiriyorsunuz:
/*you don't want to replace Salad, you want to add this new fancy 0
position to your list. It wasn't there before so you can either define it*/
myDietFavorites[0] = "Pizza";
/*or Add it*/
myDietFavorites.Add(0, "Pizza");
Tanımlamanın iki olasılığı vardır, ya daha önce var olmayan bir şeye yeni bir tanım vermek ya da zaten var olan tanımı değiştirmek istersiniz.
Ekle yöntemi bir kayıt eklemenize izin verir, ancak yalnızca tek bir koşulla: bu tanım için anahtar sözlüğünüzde olmayabilir.
Şimdi kaputun altına bakacağız. Bir sözlük oluştururken derleyiciniz kova için bir rezervasyon yapar (kayıtlarınızı saklamak için bellekte boşluklar). Paket, anahtarları sizin tanımladığınız şekilde saklamaz. Her bir anahtara (Microsoft tarafından tanımlanmıştır) gitmeden önce hashing uygulanır ve değer kısmının değişmeden kaldığını belirtmeye değer.
Örneğimi basitleştirmek için CRC32 karma algoritmasını kullanacağım. Tanımlarken:
myDietFavorites[0] = "Pizza";
Kovaya giden şey db2dc565 "Pizza" (basitleştirilmiş).
Değerini şununla değiştirdiğinizde:
myDietFavorites[0] = "Spaghetti";
Yine db2dc565 olan 0'ınıza hash uyguladınız ve orada olup olmadığını bulmak için kovanızda bu değeri ararsınız . Oradaysa, tuşa atanan değeri yeniden yazmanız yeterlidir. Orada değilse, değerinizi kovaya koyacaksınız.
Sözlüğünüzden Ekle işlevini aradığınızda, örneğin:
myDietFavorite.Add(0, "Chocolate");
Değerini gruptakilerle karşılaştırmak için 0 değerinize hashing uygulayabilirsiniz. Sadece orada değilse kovaya koyabilirsiniz .
Özellikle dize veya karakter tipi anahtar sözlükleriyle çalışıyorsanız, nasıl çalıştığını bilmek çok önemlidir. Karma işlemden geçmesi nedeniyle büyük / küçük harfe duyarlıdır. Örneğin "isim"! = "İsim". Bunu tasvir etmek için CRC32'imizi kullanalım.
"İsim" için değer: e04112b1
"Ad" için değer: 1107fb5b