gpt4 book ai didi

c# - 比较嵌套哈希集的相等性

转载 作者:行者123 更新时间:2023-12-03 22:59:10 28 4
gpt4 key购买 nike

我有一种情况需要比较嵌套哈希集的相等性以确定它们是否包含相同的元素。这是一个说明问题的简单示例:

    public void HashsetComparison()
{
var set1 = new HashSet<string> { "A", "B", "C" };
var set2 = new HashSet<string> { "B", "C", "A" };
var set3 = new HashSet<string> { "D", "E" };
var set4 = new HashSet<string> { "D", "E" };

//both currently return true
var test1 = set1.SetEquals(set2);
var test2 = set3.SetEquals(set4);

var set5 = new HashSet<HashSet<string>> { set1, set3 };
var set6 = new HashSet<HashSet<string>> { set2, set4 };

//currently returns false
var test3 = set5.SetEquals(set6);
}

我需要弄清楚要更改什么才能使 test3 返回 true。从我所做的调试来看,HashSet.SetEquals() 方法似乎要求它的子级获取它们的哈希码并使用它们来比较是否相等,这是有道理的。

我已经在 StackOverflow 上浏览了一些类似的问题,但还没有找到一个可以完全向我解释的问题。我是否需要为 HashSet 实现自定义 IEqualityComparer,或者是否有更明显的地方我做错了?

最佳答案

当您创建集合的集合时,您没有提供比较器,因此将使用默认的比较器,它将根据引用比较集合。 SetEquals的使用将使用集合的比较器,而不是允许将比较器传递给这些方法。

您需要向这两个集合传递一个比较器,根据它们的值而不是它们的引用来比较它们。还好HashSet<T>已经提供了创建此类比较器的方法:

var set5 = new HashSet<HashSet<string>>(HashSet<string>.CreateSetComparer()) 
{ set1, set3 };
var set6 = new HashSet<HashSet<string>>(HashSet<string>.CreateSetComparer())
{ set2, set4 };

关于c# - 比较嵌套哈希集的相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31658814/

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