2010-09-10 60 views
2

我想要的基本上是一個混合了字典和列表的集合。我想要一個集合,我可以添加鍵/值對(就像一個字典),但同樣能夠以相同的順序檢索值(沒有鍵),我添加它們(如列表)? .NET中是否存在這樣的集合?.NET中是否有一個集合可以同時用作字典和列表?

感謝

+0

[「LinkedHashMap」在C#3.0中可能的重複](http://stackoverflow.com/questions/486948/linkedhashmap-in-c-sharp-3-0) – nawfal 2014-06-30 15:16:16

回答

0

沒有,有沒有在其中實現在目前這個功能框架(見下文編輯)。

基本上你會想在你自己的課堂中編寫一個List<T>Dictionary<TKey, TValue>

編輯:正如wesleyhill指出的那樣,我真的忘記了OrderedDictionary - 但我不相信在這樣的框架中有一個通用集合。我假設你真的想要一個通用的集合?你可以寫一個包裝OrderedDictionary當然...

編輯:快速注意:雖然包裝集合應該不難,你會失去一個通用集合的好處:避免拳擊。當然,如果您的鍵和值是引用類型,則不是問題。

+0

感謝Jon .... – Truly 2010-09-10 10:54:53

+2

我不同意;請看我對這個問題的回答。 – 2010-09-10 10:59:43

+0

喬恩,你可以做得更好:http://stackoverflow.com/questions/486948/linkedhashmap-in-c-3-0(看看你的答案) – atamanroman 2010-09-10 11:06:42

13

有一個非通用的數據結構叫做OrderedDictionary它可以做你想做的。它有兩個索引器,一個採用Object並執行鍵/值查找,另一個採用int並執行索引查找。您還可以按照添加它們的順序列舉內容。

我沒有在文檔中看到任何關於字典查找是否實現了O(1)(即快速)行爲的內容。鑑於它實現了ISerializable它很可能使用對象的散列碼,因此有(1)字典查找。

您也可以創建自己的通用類型,它封裝了List<T>Dictionary<TKey,TValue>

+0

我明確地有一個在VB.NET中的舊實現,並可能在C#中有一個更新的版本,如果你有興趣?該TValue存儲在一個'List '中,同時有一個字典用於索引查找索引'Dictionary '。 – stevehipwell 2010-09-10 11:16:09

+0

這實際上是我需要的,除了我正在尋找一個通用集合。但我可能會使用那個。非常感謝。 – Truly 2010-09-10 11:23:16

+1

你剛剛超過Jon Skeet的答案。 OMG – 2010-09-10 11:27:20

0
  • 創建一個新類它包裝字典
  • 添加數據時,其中引入了一個索引少許輔助類包裝數據
  • 返回值時,根據索引
命令他們

不會是一個性能怪物,但應該很好。否則,您可以像在Java中一樣實現您自己的LinkedHashMap

順便問一下,看看這個: LinkedHashMap in .NET

編輯: 我喜歡wesleyhills概念更爲:封裝列表和字典中的一類。總是向兩者添加並返回List而不是Dictionary.Values。

2

System.Collections.ObjectModel.KeyedCollection非常接近你的要求,除了字典鍵必須可以從值中推導出來。

+1

+1這應該已經被授予了問題。我使用過'KeyedCollection '很多次,並且效果很好。它在內部保留了一個'List '和一個'Dictionary '同步。 – ja72 2011-10-27 17:02:49

相關問題