C#一组预先知道的整数作为字典自定义键

时间:2016-11-10 19:20:59

标签: c# algorithm dictionary

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

  1. 成员只能从0到N
  2. 中选择

    我认为有了这个限制,应该有一种更高效的方法来编写自定义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?。我不确定它的性能如何,但至少它很容易实现。

1 个答案:

答案 0 :(得分:1)

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