【发布时间】:2017-05-12 22:21:05
【问题描述】:
我想做什么是不言自明的。
我的代码:
public class Solution
{
public static void Main(String[] args)
{
Tuple<int, int> t1 = Tuple.Create(1,2);
Tuple<int, int> t2 = Tuple.Create(1,2);
Tuple<int, int> t3 = Tuple.Create(2,1);
List<Tuple<int, int>> tups = new List<Tuple<int, int>>() { t1, t2, t3 };
var dist = tups.Distinct(new TupleComparer());
foreach(var t in dist)
Console.WriteLine("{0},{1}", t.Item1, t.Item2);
}
}
class TupleComparer : IEqualityComparer<Tuple<int, int>>
{
public bool Equals(Tuple<int,int> a, Tuple<int, int> b)
{
return a.Item1 == b.Item1 && a.Item2 == b.Item2
|| a.Item1 == b.Item2 && a.Item2 == b.Item1 ;
}
public int GetHashCode(Tuple<int, int> t)
{
return t.Item1 + 31 * t.Item2;
}
}
预期输出:
1,2
(或2,1)
实际输出:
1,2
2,1
缺陷在哪里?
希望,输入此行将使我的文本与代码的比率足够高以提交问题。
【问题讨论】:
-
你试过括号吗?
(a.Item1 == b.Item1 && a.Item2 == b.Item2) || (a.Item1 == b.Item2 && a.Item2 == b.Item1)