在我当前的LINQ查询结束时,我有一些数据,其格式为IEnumerable<IEnumerable<int>>
,有几个重复的组合。在枚举枚举中调用.Distinct()
例如:
{
{5, 20}
{5, 20}
{10, 15}
}
什么使每套仅代表一次过滤这些最好的方法是什么? LINQ答案是理想的,所以我可以进一步链接它。
在我当前的LINQ查询结束时,我有一些数据,其格式为IEnumerable<IEnumerable<int>>
,有几个重复的组合。在枚举枚举中调用.Distinct()
例如:
{
{5, 20}
{5, 20}
{10, 15}
}
什么使每套仅代表一次过滤这些最好的方法是什么? LINQ答案是理想的,所以我可以进一步链接它。
如果您创建一个序列的相等比较如下:
class SequenceEqualityComparer<T> : IEqualityComparer<IEnumerable<T>> {
public bool Equals(IEnumerable<T> a, IEnumerable<T> b) {
if (a == null) return b == null;
if (b == null) return false;
return a.SequenceEqual(b);
}
public int GetHashCode(IEnumerable<T> val) {
return val.Where(v => v != null)
.Aggregate(0, (h, v) => h^v.GetHashCode());
}
}
然后,您可以拨打.Distinct(new SequenceEqualityComparer<int>())
。
您需要一个'IEqualityComparer>'。 –
SLaks
2013-05-14 18:01:26
你如何定义“平等”?订单是否重要? – 2013-05-14 18:01:54
@DStanley - 它没有 - 我在进行这一步之前正在对数据进行排序,但是如果相等性测试可以以无序的方式处理它,我可以稍微拿出一点。 – Bobson 2013-05-14 18:03:21