我想創建的字典,是概念性Dictionary<HashSet<int>, FooBar>
其中在該鍵的HashSet<int>
具有以下限制:C#集預知整數作爲字典的自定義鍵的
- 成員只能從0被選擇爲N
我認爲在限制的情況下,應該有比編寫自定義IEqualityComparer
(如本文後C# List as Dictionary key中所述)更有效的方法來做到這一點。例如,當每個這樣的散列集可以被映射到唯一的Int64時。假設列表包含1,3,18,29,然後(1 << 1) + (1 << 3) + (1 << 18) + (1 << 29)
這就是537133066可以代表這個組合,所以我可以實現Dictionary<Int64, FooBar>
來實現我的目標。但是顯然這種方法沒有擴展到超過64
------ 2016年11月11日更新------
感謝那些誰以下評論。現在我更好地理解哈希如何工作,並且我認爲試圖爲HashSet<int>
創建一個無碰撞哈希,正如我所描述的那樣,無限N不是不可能就是太難,因此不值得。
另外我在這個問題下找到了一個很好的解決方案:How do I use HashSet<T> as a dictionary key?。我不確定它的表現如何,但至少它很容易實現。
難道你不能改變這個dicitonary關鍵字爲一個字符串和concat用逗號分隔的關鍵成員? –
這是什麼問題? –
請記住,散列碼不必是_unique_ - 它們只需要對於兩個相等的對象是相同的。儘管你希望儘可能地分配一個分佈,但是有散列衝突是沒有問題的,因爲「Equals」將會被調用。所有說'Dictionary'將限制可能鍵的數量,而'Dictionary ,FooBar>'不會。 –