gpt4 book ai didi

c# - 如何删除 C# 元组列表中的反向重复项

转载 作者:行者123 更新时间:2023-11-30 13:18:56 25 4
gpt4 key购买 nike

假设我有一个这样的元组列表:

    List<Tuple<string, string>> conflicts = new List<Tuple<string, string>>();
conflicts.Add(new Tuple<string, string>("Maths", "English"));
conflicts.Add(new Tuple<string, string>("Science", "French"));
conflicts.Add(new Tuple<string, string>("French", "Science"));
conflicts.Add(new Tuple<string, string>("English", "Maths"));

我想检查元组列表中的反向重复项并删除它们,我将如何使用循环执行此操作?

注意:反向重复是指“English”、“Maths”和“Maths”、“English”的重复出现

注意:我的代码中的元组是使用 SqlDataReader 填充的,但我上面使用的示例非常接近它的布局方式。

这看起来很简单,但被难住了一个晚上

最佳答案

自定义IEqualityComparer

public class TupleComparer : IEqualityComparer<Tuple<string, string>>
{
public bool Equals(Tuple<string, string> x, Tuple<string, string> y)
{
return (x.Item1 == y.Item1 && x.Item2 == y.Item2) ||
(x.Item1 == y.Item2 && x.Item2 == y.Item1);
}

public int GetHashCode(Tuple<string, string> obj)
{
return string.Concat(new string[] { obj.Item1, obj.Item2 }.OrderBy(x => x)).GetHashCode();
//or
//return (string.Compare(obj.Item1, obj.Item2) < 0 ? obj.Item1 + obj.Item2 : obj.Item2 + obj.Item1).GetHashCode();
}
}

您可以使用 HashSet<Tuple<string, string>>而不是 List<Tuple<string, string>>

var conflicts = new HashSet<Tuple<string, string>>(new TupleComparer());
conflicts.Add(new Tuple<string, string>("Maths", "English"));
conflicts.Add(new Tuple<string, string>("Science", "French"));
conflicts.Add(new Tuple<string, string>("French", "Science"));
conflicts.Add(new Tuple<string, string>("English", "Maths"));

关于c# - 如何删除 C# 元组列表中的反向重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35928635/

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