2012-11-01 70 views
7

可能重複:
Is there an alternative to Dictionary/SortedList that allows duplicates?字典用複製的鑰匙

我要尋找一個字典排序類的,可以有重複鍵。

我搜索一下,發現Lookup類可以用來存儲重複鍵,但它沒有默認構造函數,因此,沒有任何其他對象來查找我們不能初始化。

但是我沒有任何這樣的對象最初從中我可以初始化一個查找對象。

所以,我的問題是,是否有.NET Framework 3.5的任何一類,其行爲類似於字典,但讓我有重複鍵,如查找?

+7

我可以問你爲什麼想複製密鑰?您可以將數組存儲爲您的值。 – LightStriker

+0

@ Marc-AndréJutras,是的,我想將用戶操作與其受影響的內容一起存儲,以便對受影響的對象執行合併操作。我可以一個接一個地做,但這樣很耗時,所以我只是將它們存儲起來,然後在一個單獨的環境中執行,所以只有那個行動需要時間而不是全部。 –

+0

如何使用'字典>'而不是'Dictinary ',類似於Lookup? –

回答

12

根據定義,字典將永遠不能具有相同值的多個鍵。 (如果你擡頭看了一把鑰匙,你會返回什麼?)甚至你所指的查找也不允許。你可以做的是讓每個按鍵對應多個值(邏輯上,而不是技術上的)。這是通過一個字典來完成的,該字典中的值是某種數據結構(例如,List),其中包含與該特定鍵相對應的所有值。

+1

這就像Ninject的['MultiMap'](https://github.com/ninject/ninject/blob/d663e013632780ca3d47818b7ba372a103a4ac9d/src/Ninject/Infrastructure/Multimap.cs) – khellang

+1

我用'Dictionary > (或類似)。 – Bobson

+1

@khellang是的,這只是一個圍繞'字典>'的包裝;它實際上並沒有爲你做太多的事情,但它確實有點用處。通常我發現使用「字典」直接很簡單,就像Bobson提到的那樣。 – Servy

19

您可以創建一個鍵值對的列表。

​​
+2

但是,它不是一個邏輯上的字典,它只是一個對的列表。 (這可能是他需要/想要的,我只是技術。) – Servy

+0

但是,然後關鍵檢索將受到影響。一本字典在關鍵研究中速度很快。 – LightStriker

+0

的確如此,但我不確定你如何擁有允許重複鍵並保留字典優點的東西。看起來他應該使用帶有值列表的字典,這樣當一個密鑰被複制時,第二個值將被添加到列表中,並且在查找密鑰時都會被檢索到。 [編輯:塞維維在他的回答中說,提高他的答案] – madeFromCode

3

您可以通過使用列表的字典組成一類自己,Dictionary<TKey, List<TValue>>

您可以創建一個類從類繼承,並添加適當的附加方法等,處理上創建一個新的列表中的第一項給定的關鍵。

+0

你知道 - 我一直都在使用這種結構,但我從來沒有想過要讓一個班級來處理它。我做了一些擴展方法,但不是一個類。好主意。 – Bobson