Untuk menjawab pertanyaan pertama kita perlu melihat tujuan kamus dan teknologi yang mendasari.
Dictionaryadalah daftar di KeyValuePair<Tkey, Tvalue>mana setiap nilai diwakili oleh kunci uniknya. Katakanlah kami memiliki daftar makanan favorit Anda. Setiap nilai (nama makanan) diwakili oleh kunci uniknya (posisi = seberapa Anda menyukai makanan ini).
Kode contoh:
Dictionary<int, string> myDietFavorites = new Dictionary<int, string>()
{
{ 1, "Burger"},
{ 2, "Fries"},
{ 3, "Donuts"}
};
Katakanlah Anda ingin tetap sehat, Anda berubah pikiran dan Anda ingin mengganti "Burger" favorit Anda dengan salad. Daftar Anda tetap menjadi daftar favorit Anda, Anda tidak akan mengubah sifat daftar. Favorit Anda akan tetap menjadi nomor satu di daftar, hanya nilainya yang akan berubah. Ini adalah saat Anda menyebutnya:
/*your key stays 1, you only replace the value assigned to this key
you alter existing record in your dictionary*/
myDietFavorites[1] = "Salad";
Tapi jangan lupa Anda adalah programmernya, dan mulai sekarang Anda menyelesaikan kalimat Anda dengan; Anda menolak untuk menggunakan emoji karena akan menimbulkan kesalahan kompilasi dan semua daftar favorit berbasis indeks 0.
Diet Anda juga berubah! Jadi Anda mengubah daftar Anda lagi:
/*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");
Ada dua kemungkinan dalam mendefinisikan, Anda ingin memberikan definisi baru untuk sesuatu yang belum ada sebelumnya atau Anda ingin mengubah definisi yang sudah ada.
Add method memungkinkan Anda untuk menambahkan record tetapi hanya dengan satu syarat: kunci untuk definisi ini mungkin tidak ada dalam kamus Anda.
Sekarang kita akan melihat di bawah tenda. Saat Anda membuat kamus, kompiler Anda membuat reservasi untuk bucket (spasi dalam memori untuk menyimpan catatan Anda). Bucket tidak menyimpan kunci dengan cara Anda mendefinisikannya. Setiap kunci di-hash sebelum pergi ke bucket (ditentukan oleh Microsoft), perlu disebutkan bahwa bagian nilai tetap tidak berubah.
Saya akan menggunakan algoritma hashing CRC32 untuk menyederhanakan contoh saya. Saat Anda mendefinisikan:
myDietFavorites[0] = "Pizza";
Apa yang akan ke ember adalah db2dc565 "Pizza" (disederhanakan).
Saat Anda mengubah nilainya dengan:
myDietFavorites[0] = "Spaghetti";
Anda hash 0 Anda yang lagi db2dc565 lalu Anda mencari nilai ini di keranjang Anda untuk menemukan apakah itu ada. Jika ada, Anda cukup menulis ulang nilai yang ditetapkan ke kunci tersebut. Jika tidak ada, Anda akan menempatkan nilai Anda di keranjang.
Saat Anda memanggil fungsi Add di kamus Anda seperti:
myDietFavorite.Add(0, "Chocolate");
Anda melakukan hash 0 untuk membandingkan nilainya dengan nilai di bucket. Anda boleh memasukkannya ke dalam ember hanya jika tidak ada .
Sangat penting untuk mengetahui cara kerjanya terutama jika Anda bekerja dengan kamus kunci jenis string atau char. Peka huruf besar / kecil karena menjalani hashing. Jadi misalnya "nama"! = "Nama". Mari gunakan CRC32 kami untuk menggambarkan ini.
Nilai untuk "nama" adalah: e04112b1
Nilai untuk "Nama" adalah: 1107fb5b