C# 如何按子列表对列表列表进行分组
输入:两个整数的列表C# 如何按子列表对列表列表进行分组,c#,linq,C#,Linq,输入:两个整数的列表 List<List<int>> lists = new List<List<int>>() { {1,2}, {20,21}, {3,2}, {21,55} }; 如中所述,在编写自己的IEqualityComparer时,必须实现Equals和GetHashCode 但是将首先调用GetHashCode,如果它们不同,则不会调用Equals。 所以我们需要强制GetHashCode为一个常数 // htt
List<List<int>> lists = new List<List<int>>() {
{1,2},
{20,21},
{3,2},
{21,55}
};
如中所述,在编写自己的IEqualityComparer时,必须实现Equals
和GetHashCode
但是将首先调用
GetHashCode
,如果它们不同,则不会调用Equals
。所以我们需要强制
GetHashCode
为一个常数
// https://stackoverflow.com/questions/5231845/c-sharp-linq-group-by-on-multiple-columns
class ListFirstTwoComparer : IEqualityComparer<List<int>>
{
public bool Equals(List<int> a, List<int> b)
{
var a2 = a.Take(2);
var b2 = b.Take(2);
//https://stackoverflow.com/questions/11092930/check-if-listt-contains-any-of-another-list
return a2.Any(x => b2.Any(y => y == x));
}
public int GetHashCode(List<int> input)
{
return 0;
}
}
var result = lists.GroupBy(p => p, new ListFirstTwoComparer());
,那就太好了。“两个整数的列表列表”?这2个整数是元组吗?阵列呢?钥匙对?具有两个属性的对象?你们有最小样本的初始值吗。以及预期的结果。是否要在嵌套中就地分组。或者阿谀奉承?请提供输入和预期结果的示例。因此,如果内部元素是一个列表,您确定group by始终有2个元素吗?还有吗?可能会少一点吗?或者你需要提防吗{code>{{1,2},{3,2},{2,5},请告诉我,{1,2},{3,2},{2,5}的预期答案是什么?同样的{1,2},{3,2},{2,5}
// https://stackoverflow.com/questions/5231845/c-sharp-linq-group-by-on-multiple-columns
class ListFirstTwoComparer : IEqualityComparer<List<int>>
{
public bool Equals(List<int> a, List<int> b)
{
var a2 = a.Take(2);
var b2 = b.Take(2);
//https://stackoverflow.com/questions/11092930/check-if-listt-contains-any-of-another-list
return a2.Any(x => b2.Any(y => y == x));
}
public int GetHashCode(List<int> input)
{
return 0;
}
}
var result = lists.GroupBy(p => p, new ListFirstTwoComparer());
[
{
{1,2},
{1,2},
{3,2}
},
{
{20,21},
{21,22}
}
]