gpt4 book ai didi

c# - 如何检查两个字典是否包含相同的值?

转载 作者:太空宇宙 更新时间:2023-11-03 21:46:11 25 4
gpt4 key购买 nike

我知道了,但是它太短了,我几乎可以肯定我遗漏了什么:

public static bool ValueEquals<TKey, TValue>
(this IDictionary<TKey, TValue> source, IDictionary<TKey, TValue> toCheck)
{
if (object.ReferenceEquals(source, toCheck))
return true;
if (source == null || toCheck == null || source.Count != toCheck.Count)
return false;
return source.OrderBy(t => t.Key).SequenceEqual(toCheck.OrderBy(t => t.Key));
}

所以基本上,如果它们具有相同的引用,则返回 true。如果它们中的任何一个为 null 或者它们的计数不同,则返回 false。如果序列(先按键再按值排序)相同,则返回。我一定遗漏了什么,因为它太短了,不够好。

最佳答案

是的,只要所有键都实现 IComparable 并且键和值都有一个 Equals 方法来比较您希望它比较的内容,您的代码就可以工作.如果键或值没有对这些方法进行适当的实现,那么这将不起作用。

您的方法也没有为要传入的自定义 IComparerIEqualityComparer 对象提供功能,以解决对象没有理想实现的情况这些方法之一。我们不能说在您的具体情况下这是否是一个问题。

您的解决方案还需要对所有值进行排序,这比集合等于的其他可能实现方式效率稍低,但不会显着更糟,所以如果您没有特别大的值集合应该不是一个大问题。

一种功能与您的方法相当但速度有所提高的方法是(保留您的前两项检查):

return !source.Except(toCheck).Any();

由于此方法不依赖于排序,它还提供了不需要 TKey 来实现 IComparable 的好处。

此方法和您的方法都有效的一个关键原因是 KeyValuePair 覆盖了它对 EqualsGetHashCode 的定义以基于它自己的引用,而是基于它包装的键和值。如果键和值都相等,则两个 KeyValuePairs 相等,哈希码包含键和值的哈希码。

关于c# - 如何检查两个字典是否包含相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16944458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com