Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何按子列表对列表列表进行分组_C#_Linq - Fatal编程技术网

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}        
    }
]