2009-11-20 76 views

回答

52

當你不需要在密鑰上快速查找時 - 維護Dictionary使用的哈希表具有一定的開銷。

+6

另外列表插入操作是更快的,在字典 – 2009-11-20 09:27:01

+0

是不是KeyValuePair是隻讀? – 2016-12-27 04:55:34

+1

其字段是隻讀的,但您可以隨時替換列表中的整個元素。 – 2016-12-27 06:21:09

46

簡而言之,列表並不強制密鑰的唯一性,所以如果你需要這種語義,那麼你應該使用這個。

+4

+1請注意,詞典不強制值的唯一性! – gdoron 2011-11-08 09:36:17

3

http://blogs.msdn.com/bclteam/archive/2004/09/03/225473.aspx

KeyValuePairDictionaryEntry
[克齊斯茨托夫·克瓦林納]

我們與 實施IEnumerableDictionary<K,V>討論的一個問題。 IEnumerable.GetEnumerator().Current 應返回什麼類型? KeyValuePair<K,V>DictionaryEntry?相同的 ICollection.CopyTo。什麼 類型應該被複制到數組的實例?

我們決定如下:IEnumerableICollection接口 實施將使用 KeyValuePair<K,V>作爲項目類型。 IDictionary特定會員 (GetEnumerator返回 IDictionaryEnumerator)將使用 DictionaryEntry作爲項目類型。

的原因是,我們是在做一個改變,其中 IEnumerator<T>將延長 IEnumerator的過程 。如果從 Dictionary<K,V>IEnumerable<T>IEnumerable 我們突然改變了從枚舉數返回的 項的類型,這將是非常奇怪的 。

5

在用於silverlight的SOAP webservices中,我們發現Dictionary不會序列化。這將是一種情況,您可以在Dictionary上使用KeyValuePair列表。

11

當你關心的項目的順序列表也將是有益的。

+2

不會[SortedDictionary](https://msdn.microsoft.com/en-us/library/f7fta44c.aspx)覆蓋此? – 2015-02-18 00:11:15

+2

是的,但SortedDictionary無法覆蓋值的順序,只有鍵。 – ConfusedMan 2015-04-15 21:04:44

7

除了Phillip Ngan的答案,SOAP或其他,你不能XML序列化實現IDictionary的對象。

問:爲什麼我不能序列化哈希表?

答:XmlSerializer無法處理實現IDictionary接口的類。這部分是由於進度的限制,部分是由於這樣的事實,一個哈希表沒有在XSD類型系統的配對。唯一的解決方案是實現一個不實現IDictionary接口的自定義哈希表。

from here

12

字典是泛型類型包含鍵值對的集合。由於在內部使用散列函數,所以字典對於查找操作是快速的。這意味着,所有密鑰必須在字典中唯一。

考慮這方面的例子:

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. 

所以,你應該考慮兩個至少兩件事情:

  1. 你要搜索的字典具體項目?
  2. 是否需要某些字段 非唯一(例如pair:firstname/lastname)。
+0

我認爲這裏的要點是字典鍵必須是唯一的,其中List 鍵不能是唯一的。 – 2015-12-21 07:35:42

+0

@BrunoBieri List 鍵*可能*不是唯一的 – niksofteng 2017-06-06 14:44:51

+0

@niksofteng你是絕對正確的。我的錯。 – 2017-06-06 19:57:54

相關問題