Aynı türler için KeyValuePair Listesi ile Sözlük arasındaki fark nedir? Birini veya diğerini kullanmak için uygun bir zaman var mı?
Aynı türler için KeyValuePair Listesi ile Sözlük arasındaki fark nedir? Birini veya diğerini kullanmak için uygun bir zaman var mı?
Yanıtlar:
Anahtarda hızlı aramalara ihtiyacınız olmadığında - tarafından kullanılan hashtable'ı sürdürmenin Dictionary
belirli bir ek yükü vardır.
Kısacası, liste anahtarın benzersizliğini zorlamaz, bu nedenle bu anlambilime ihtiyacınız varsa, kullanmanız gereken şey budur.
Sözlük, anahtar-değer çiftlerinden oluşan bir koleksiyon içeren genel bir türdür . Sözlük, arama işlemleri için hızlıdır, çünkü dahili olarak karma işlevi kullanır . Bu, tüm anahtarların sözlükte benzersiz olması gerektiği anlamına gelir .
Şu örnekleri düşünün:
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.
Bu yüzden her zaman en az iki şeyi dikkate almalısınız:
Liste, öğelerin sırasını önemsediğinizde de yararlı olacaktır.
Phillip Ngan'ın cevabına ek olarak, SOAP veya başka türlü, IDictionary uygulayan nesneleri XML serileştiremezsiniz.
S: Hashtable'ları neden serileştiremiyorum?
C: XmlSerializer, IDictionary arabirimini uygulayan sınıfları işleyemez. Bu kısmen zamanlama kısıtlamalarından ve kısmen de bir hashtable'ın XSD tipi sistemde bir karşılığı olmaması gerçeğinden kaynaklanıyordu. Tek çözüm, IDictionary arayüzünü uygulamayan özel bir hashtable uygulamaktır.
Silverlight için SOAP web hizmetlerinde, Dictionary'lerin serileştirmediğini gördük. Bu, bir Sözlük üzerinde KeyValuePair Listesi kullanacağınız bir durum olabilir.
.
Gönderen http://blogs.msdn.com/bclteam/archive/2004/09/03/225473.aspx :
KeyValuePair
genelDictionaryEntry
[Krzysztof Cwalina]
IEnumerable
On uygulamasında bir sorunu tartıştıkDictionary<K,V>
. Hangi türIEnumerable.GetEnumerator().Current
dönmelidir?KeyValuePair<K,V>
veyaDictionaryEntry
? AynıICollection.CopyTo
. Diziye hangi türden örnekler kopyalanmalıdır?Aşağıdakilere karar verdik:
IEnumerable
veICollection
arayüz uygulamalarıKeyValuePair<K,V>
öğe türü olarak kullanılacak.IDictionary
belirli üyeler (GetEnumerator
geri dönenIDictionaryEnumerator
)DictionaryEntry
materyal türü olarak kullanacaktır .Bunun nedeni,
IEnumerator<T>
uzanacak bir değişiklik yapma sürecinde olmamızdırIEnumerator
.Dictionary<K,V>
->IEnumerable<T>
-> ' den hiyerarşide yürümek çok tuhaf olurduIEnumerable
.