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 Dictionarybelirli 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 :
KeyValuePairgenelDictionaryEntry
[Krzysztof Cwalina]
IEnumerableOn uygulamasında bir sorunu tartıştıkDictionary<K,V>. Hangi türIEnumerable.GetEnumerator().Currentdönmelidir?KeyValuePair<K,V>veyaDictionaryEntry? AynıICollection.CopyTo. Diziye hangi türden örnekler kopyalanmalıdır?Aşağıdakilere karar verdik:
IEnumerableveICollectionarayüz uygulamalarıKeyValuePair<K,V>öğe türü olarak kullanılacak.IDictionarybelirli üyeler (GetEnumeratorgeri dönenIDictionaryEnumerator)DictionaryEntrymateryal 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.