c#集合的已知整数作为字典的自定义键
本文关键字:字典 自定义 整数 集合 | 更新日期: 2023-09-27 18:17:16
我想创建一个概念上为Dictionary<HashSet<int>, FooBar>
的字典,其中键中的HashSet<int>
具有以下限制:
- 成员只能在0到N之间选择
我认为有了限制,应该有一种比编写自定义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描述的那样,要么是不可能的,要么是太难了,因此不值得。
我也在这个问题下找到了一个很好的解决方案:我如何使用HashSet
最好是在列表中生成值的散列,并使用int或long作为键的字典。