Apa perbedaan antara List of KeyValuePair dan Dictionary untuk tipe yang sama? Apakah ada waktu yang tepat untuk menggunakan salah satunya?
Apa perbedaan antara List of KeyValuePair dan Dictionary untuk tipe yang sama? Apakah ada waktu yang tepat untuk menggunakan salah satunya?
Jawaban:
Ketika Anda tidak membutuhkan pencarian cepat pada kunci - mempertahankan hashtable yang digunakan oleh Dictionarymemiliki overhead tertentu.
Singkatnya, daftar tidak memaksakan keunikan kunci, jadi jika Anda membutuhkan semantik itu maka itulah yang harus Anda gunakan.
Kamus adalah jenis umum yang berisi kumpulan pasangan nilai kunci. Kamus cepat untuk operasi pencarian, karena menggunakan fungsi hash secara internal . Artinya, semua kunci di kamus harus unik .
Pertimbangkan contoh ini:
List<KeyValuePair<int, string>> pairs = new List<KeyValuePair<int, string>>();
pairs.Add(new KeyValuePair<int, string>(1, "Miroslav"));
pairs.Add(new KeyValuePair<int, string>(2, "Naomi"));
pairs.Add(new KeyValuePair<int, string>(2, "Ingrid"));
Dictionary<int, string> dict = new Dictionary<int, string>();
dict.Add(1, "Miroslav");
dict.Add(2, "Naomi");
dict.Add(2, "Ingrid"); // System.ArgumentException: An item with the same key has already been added.
Jadi, Anda harus selalu mempertimbangkan setidaknya dua hal:
Daftar ini juga akan berguna jika Anda peduli dengan urutan item.
Lebih jauh dari jawaban Phillip Ngan, SOAP atau lainnya, Anda tidak dapat membuat serialisasi XML objek yang mengimplementasikan IDictionary.
T: Mengapa saya tidak dapat membuat serial hashtables?
J: XmlSerializer tidak dapat memproses kelas yang mengimplementasikan antarmuka IDictionary. Ini sebagian karena kendala jadwal dan sebagian karena fakta bahwa hashtable tidak memiliki mitra dalam sistem tipe XSD. Satu-satunya solusi adalah dengan menerapkan hashtable khusus yang tidak mengimplementasikan antarmuka IDictionary.
Dalam layanan web SOAP untuk silverlight, kami telah menemukan bahwa Kamus tidak membuat serial. Ini akan menjadi situasi di mana Anda akan menggunakan List of KeyValuePair melalui Dictionary.
.
Dari http://blogs.msdn.com/bclteam/archive/2004/09/03/225473.aspx :
KeyValuePairvs.DictionaryEntry
[Krzysztof Cwalina]Kami membahas masalah dengan penerapan
IEnumerablepadaDictionary<K,V>. Jenis apa yang harusIEnumerable.GetEnumerator().Currentdikembalikan?KeyValuePair<K,V>atauDictionaryEntry? Sama untukICollection.CopyTo. Contoh jenis apa yang harus disalin ke array?Kami memutuskan hal berikut:
IEnumerabledanICollectionimplementasi antarmuka akan digunakanKeyValuePair<K,V>sebagai tipe item.IDictionaryanggota tertentu (GetEnumeratorkembaliIDictionaryEnumerator) akan digunakanDictionaryEntrysebagai tipe barang.Alasannya adalah bahwa kami sedang dalam proses membuat perubahan yang
IEnumerator<T>akan meluasIEnumerator. Akan sangat aneh jika menjalankan hierarki dariDictionary<K,V>->IEnumerable<T>->IEnumerablekami tiba-tiba mengubah jenis item yang dikembalikan dari enumerator.