我想要的基本上是一個混合了字典和列表的集合。我想要一個集合,我可以添加鍵/值對(就像一個字典),但同樣能夠以相同的順序檢索值(沒有鍵),我添加它們(如列表)? .NET中是否存在這樣的集合?.NET中是否有一個集合可以同時用作字典和列表?
感謝
我想要的基本上是一個混合了字典和列表的集合。我想要一個集合,我可以添加鍵/值對(就像一個字典),但同樣能夠以相同的順序檢索值(沒有鍵),我添加它們(如列表)? .NET中是否存在這樣的集合?.NET中是否有一個集合可以同時用作字典和列表?
感謝
沒有,有沒有在其中實現在目前這個功能框架(見下文編輯)。
基本上你會想在你自己的課堂中編寫一個List<T>
和Dictionary<TKey, TValue>
。
編輯:正如wesleyhill指出的那樣,我真的忘記了OrderedDictionary
- 但我不相信在這樣的框架中有一個通用集合。我假設你真的想要一個通用的集合?你可以寫一個包裝OrderedDictionary
當然...
編輯:快速注意:雖然包裝集合應該不難,你會失去一個通用集合的好處:避免拳擊。當然,如果您的鍵和值是引用類型,則不是問題。
感謝Jon .... – Truly 2010-09-10 10:54:53
我不同意;請看我對這個問題的回答。 – 2010-09-10 10:59:43
喬恩,你可以做得更好:http://stackoverflow.com/questions/486948/linkedhashmap-in-c-3-0(看看你的答案) – atamanroman 2010-09-10 11:06:42
有一個非通用的數據結構叫做OrderedDictionary
它可以做你想做的。它有兩個索引器,一個採用Object
並執行鍵/值查找,另一個採用int
並執行索引查找。您還可以按照添加它們的順序列舉內容。
我沒有在文檔中看到任何關於字典查找是否實現了O(1)(即快速)行爲的內容。鑑於它實現了ISerializable
它很可能使用對象的散列碼,因此有(1)字典查找。
您也可以創建自己的通用類型,它封裝了List<T>
和Dictionary<TKey,TValue>
。
我明確地有一個在VB.NET中的舊實現,並可能在C#中有一個更新的版本,如果你有興趣?該TValue存儲在一個'List
這實際上是我需要的,除了我正在尋找一個通用集合。但我可能會使用那個。非常感謝。 – Truly 2010-09-10 11:23:16
你剛剛超過Jon Skeet的答案。 OMG – 2010-09-10 11:27:20
不會是一個性能怪物,但應該很好。否則,您可以像在Java中一樣實現您自己的LinkedHashMap。
順便問一下,看看這個: LinkedHashMap in .NET
編輯: 我喜歡wesleyhills概念更爲:封裝列表和字典中的一類。總是向兩者添加並返回List而不是Dictionary.Values。
System.Collections.ObjectModel.KeyedCollection非常接近你的要求,除了字典鍵必須可以從值中推導出來。
+1這應該已經被授予了問題。我使用過'KeyedCollection
[「LinkedHashMap」在C#3.0中可能的重複](http://stackoverflow.com/questions/486948/linkedhashmap-in-c-sharp-3-0) – nawfal 2014-06-30 15:16:16