如何使用键的自定义比较器从通用字典中获取值?
我有一个通用的对象字典,想要使用自定义比较器来更新字典中的值。
myObjects
包含对象的字典,其值为该对象存在的次数。请注意,该值可能会使用不同的比较器多次增加或完全删除。
testObject
是我的自定义对象。
customComparer
是一个基于 testObject 类型动态变化的比较器。但所有比较器的类型都是 IEqualityComparer
IDictionary<MyObject, int> myObjects;
var testObject;
var customComparer;
if (myObjects.Keys.Contains(testObject, customComparer))
{
//get the value, if its > 1 then decrement the value
//else remove the entry entirely
//not sure how to get the value based on my custom comparer??
//this code below does not work because it requires the custom comparer
//var occurrences = myObjects[testObject];
//if (occurrences > 1)
// myObjects[testObject]--;
//else
// myObjects.Remove(testObject);
}
else
{
myObjects.Add(testObject, 1);
}
我可以使用 Keys.Contains 来确定对象是否存在于自定义比较器中,但我不确定如何更新该值?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
创建字典时,您应该在 IEqualityComparer >构造函数。字典构建后,您无法更改相等比较器。
您可以迭代键值对,直到找到根据自定义比较器匹配的键,但这样您就无法利用字典提供的功能。
When you create the dictionary you should provide your custom
IEqualityComparer
in the constructor. You can't change the equality comparer after the dictionary is constructed.You could iterate over the key value pairs until you find a key that matches according to your custom comparer, but then you aren't taking advantage of the features that a Dictionary provides.
对此没有快速实施。相反,我创建了一个包装器 IEqualityComparer,其中包含许多内部相等比较器。包装器重写了 Equals 和 GetHashCode 方法,这些方法根据比较对象的属性选择适当的相等比较器内部字典。
然后比较就可以了...
There was no quick imlpementation for this. Instead, I created a wrapper IEqualityComparer that housed numerous internal equality comparers. The wrapper overwrote the Equals and GetHashCode methods which picked the appropriate internal dictionary of equality comparers based on a property from the comparison object.
Then the comparison works...