c#集合的已知整数作为字典的自定义键

本文关键字:字典 自定义 整数 集合 | 更新日期: 2023-09-27 18:17:16

我想创建一个概念上为Dictionary<HashSet<int>, FooBar>的字典,其中键中的HashSet<int>具有以下限制:

  1. 成员只能在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作为字典的键?我不确定它的性能如何,但至少它很容易实现。

c#集合的已知整数作为字典的自定义键

最好是在列表中生成值的散列,并使用int或long作为键的字典。