我有一组同类型的对,例如: 1,12,1
我需要计算不同的组合: 1,1
public void DistinctPairsTest()
{
IList<Tuple<int, int>> pairs = new List<Tuple<int, int>>();
pairs.Add(Tuple.Create(1, 1));
pairs.Add(Tuple.Create(1, 2));
pairs.Add(Tuple.Create(2, 1));
pairs.Add(Tuple.Create(2, 1));
IList<Tuple<int, int>> distinctPairs = GetDistinctPairs(pairs);
Assert.AreEqual(2, distinctPairs.Count);
}
private IList<Tuple<T, T>> GetDistinctPairs<T>(IList<Tuple<T, T>> pairs)
{
throw new NotImplementedException();
}
如何实现通用的GetDistinctPairs(对)?
解决方案:
正如Heinzi和Dennis_E所建议的,我实现了一个通用IEqualityComparer。欢迎改进:)
public class CombinationEqualityComparer<T> : IEqualityComparer<Tuple<T, T>>
{
public bool Equals(Tuple<T, T> x, Tuple<T, T> y)
{
bool equals = new HashSet<T>(new[] { x.Item1, x.Item2 }).SetEquals(new[] { y.Item1, y.Item2 });
return equals;
}
public int GetHashCode(Tuple<T, T> obj)
{
return obj.Item1.GetHashCode() + obj.Item2.GetHashCode();
}
}
发布于 2014-05-21 05:07:14
有一个 overload,它允许您指定一个IEqualityComparer
。
提供一个自定义IEqualityComparer<Tuple<T, T>>
,它认为1、2和2、1相等。
实现应该是琐碎的,并作为练习留给读者。:-)
发布于 2014-05-21 05:07:24
您可以编写一个实现IEqualityComparer<Tuple<int, int>>
的类,并在对Distinct()的调用中使用它:
pairs.Distinct(new YourComparerClass());
https://stackoverflow.com/questions/23783981
复制相似问题