假设我有一个像这样的元组列表:
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"));
Run Code Online (Sandbox Code Playgroud)
我想检查元组列表的反向重复并删除它们,我将如何使用循环执行此操作?
注意:通过反向复制,我的意思是"英语","数学"和"数学","英语"的再次出现
注意:我的代码中的我的元组是使用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();
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用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"));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
658 次 |
| 最近记录: |