0

有没有办法从 SortedDictionary 中检索与给定对象相等的键?为了说明,假设我创建了一个字典,它具有相当大的内存,不可变的键类型:

var dictionary = SortedDictionary<MyHugeType, int>();
var myEnormousKey = new MyHugeType();

dictionary[myEnormousKey] = 123;

然后稍后,我会做这样的事情:

// This is a new instance, but it's identical to the previous key
var myIdenticalKey = new MyHugeType();

if(dictionary.ContainsKey(myIdenticalKey)) {
    myIdenticalKey = dictionary.GetKeyEqualTo(myIdenticalKey);
}

// Use myIdenticalKey reference...

显然,SortedDictionary 没有“GetKeyEqualTo”方法。但是有什么方法可以达到类似的效果吗?这基本上会产生实习重关键对象的效果,以便可以丢弃相同的实例。我知道我可以使用 SortedList 类通过检索键的索引并随后检索其匹配的对象实例来做到这一点,但 SortedDictionary 的一致插入性能对于我的使用会更好。

如果没有遍历所有字典的键来搜索匹配项,或者编写我自己的 BST 类,有没有办法通过 .NET 的内置集合来实现这一目标?

4

3 回答 3

1

您可以将值对象从 int 更改为包含值和原始键的结构或类。然后要访问原始密钥,您可以执行以下操作:

dictionary[myIdenticalKey].OriginalKey

和类似的价值:

dictionary[myIdenticalKey].Value
于 2011-05-16T10:14:25.837 回答
0

您可以IEquatable在关键类中实现接口。您可以在此处指定类的两个对象何时彼此相等。之后,您只需使用运算符测试条目的存在,ContainsKey当返回时true您可以使用运算符获取它[]

您还可以提供IComparer实现相同的结果。

于 2011-05-16T10:16:07.190 回答
0

如果您覆盖Equals()并使用确定两个实例是否相同的代码,那么您将不会在字典中获得重复的键GetHashCode()MyHugeType你是这个意思吗?

于 2011-05-16T10:18:38.003 回答