我想创建一个概念上Dictionary<HashSet<int>, FooBar>
的字典,其中密钥中的HashSet<int>
具有以下限制:
我认为有了这个限制,应该有一种更高效的方法来编写自定义IEqualityComparer
(如本文C# List as Dictionary key中所述)。例如,当N <64时,每个这样的散列集可以映射到唯一的Int64。假设列表包含1,3,18,29,那么(1 << 1) + (1 << 3) + (1 << 18) + (1 << 29)
即537133066可以代表此组合,因此我可以实现Dictionary<Int64, FooBar>
来实现我的目标。然而,显然这种方法不会超过64.
------ 11/11/2016更新------
感谢下面评论过的人。现在我对哈希的工作方式有了更好的理解,并且我认为尝试为HashSet<int>
创建一个无冲突的哈希,就像我用无界N描述的那样,要么不可能,要么太难,因此不值得。
此外,我在这个问题下找到了一个很好的解决方案:How do I use HashSet<T> as a dictionary key?。我不确定它的性能如何,但至少它很容易实现。
答案 0 :(得分:1)
最好是在列表中生成值的哈希值,并使用带有int或long作为键的字典。