C# 一组已知整数作为字典自定义键

标签 c# algorithm dictionary

我想创建一个概念上为 Dictionary<HashSet<int>, FooBar> 的字典HashSet<int>在哪里在 key 中有以下限制:

  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 描述的那样,要么不可能,要么太难,因此不值得。

我在这个问题下也找到了一个很好的解决方案:How do I use HashSet<T> as a dictionary key? .我不确定它的性能如何,但至少它很容易实现。

最佳答案

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

关于C# 一组已知整数作为字典自定义键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40535408/

相关文章:

c# - 每次我的 WPF 应用程序启动时,JumpList 都会重置

algorithm - 加权快速联合树高度

python - 如何在 map 中将项目作为参数列表传递?

c# - 将 C++ 解决方案转换为类库

c# - C# foreach 循环中的 catch {} 和 catch {continue;} 有什么区别?

c# - 从 CaSTLe Windsor 拦截器访问方法的自定义属性

algorithm - 完全图 k-着色求解器

c++ - 在 C++ 字符串中转义 XML/HTML 的最有效方法?

dictionary - 使用 golang 的字符串路径变量导航到 map

python - 将嵌套字典的键替换为另一个字典的值(其中两个字典的键相等)),键的值可以是字典列表