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# 如果LINQ中的GroupBy有两个参数,它将做什么?_C#_Linq_Unity3d - Fatal编程技术网

C# 如果LINQ中的GroupBy有两个参数,它将做什么?

C# 如果LINQ中的GroupBy有两个参数,它将做什么?,c#,linq,unity3d,C#,Linq,Unity3d,我正在努力理解下面的代码: Color32[]colors=mesh.colors32; IEnumerable hierarchyMap=colors.Select((color,index)=>new{color,index}).GroupBy(c=>c.color.g,c=>c.index); 我使用google,只找到了GroupBy(xxx)的一些教程(括号内只有一个参数),这意味着xxx是组的键。如果括号内有两个参数呢 更新 在GroupBy方法中使用两个参数时,这两个参数表示 按

我正在努力理解下面的代码:

Color32[]colors=mesh.colors32;
IEnumerable hierarchyMap=colors.Select((color,index)=>new{color,index}).GroupBy(c=>c.color.g,c=>c.index);

我使用google,只找到了GroupBy(xxx)的一些教程(括号内只有一个参数),这意味着xxx是组的键。如果括号内有两个参数呢

更新

在GroupBy方法中使用两个参数时,这两个参数表示

按键选择器
Func

用于提取每个元素的键的函数

元素选择器
Func

将每个源元素映射到 I分组

它所做的是基于第一个参数对序列进行分组,并使用指定为第二个参数的函数投影组中的每个元素

根据指定的键选择器函数对序列的元素进行分组,并使用指定的函数为每个组投影元素

使用两个键分组

如果您的意图是按两个键进行分组,那么可以使用匿名类型按多个键进行分组

.GroupBy(c => new {c.color.g, c.index})
例如,从OP中的代码

 colors.Select((color, index) => new { color, index })
       .GroupBy(c => new {c.color.g, c.index});

从技术上讲,公认的答案是尝试使用两个键进行分组。它没有解释如果在
GroupBy
括号内有两个参数会发生什么

如果括号内有两个参数,它将根据指定的键选择器函数对序列的元素进行分组,并使用指定的函数为每个组投影元素

假设我们有一个
Employee

public class Employee
{
    public string Name { get; set; }
    public int Age { get; set; }
}
下面是代码逻辑

var employees = new List<Employee>
{ 
    new Employee { Name="Dave", Age=25 },
    new Employee { Name="John", Age=23 },
    new Employee { Name="Michael", Age=30 },
    new Employee { Name="Bobby", Age=30 }, 
    new Employee { Name="Tom", Age=25 }, 
    new Employee { Name="Jane", Age=21 }
};

var query = employees.GroupBy(employee => employee.Age, employee => employee.Name);

foreach (IGrouping<int, string> employeeGroup in query)
{
    Console.WriteLine(employeeGroup.Key);
    foreach (string name in employeeGroup)
    {
        Console.WriteLine($"=> {name}");
    }
}

这是否意味着每个键都是一个{c.color.g,c.index}呢?@TIANLUNZHU这是真的。这个答案毫无意义。原始代码按
color.g
对颜色索引进行分组。这一个不仅没有回答原来的问题,而且显示了无用的分组(索引是唯一的,因此将其包含在键中基本上会为每个项目创建一个组)。@IvanStoev我想你是对的。当我重读这个问题时,我的答案没有意义。第一个是键选择器(集合将通过它进行分组),第二个是元素选择器(结果集应该如何构造)。这是文件:
25
=> Dave
=> Tom
23
=> John
30
=> Michael
=> Bobby
21
=> Jane