如果有两个参数,LINQ 中的 GroupBy 会做什么?

TIA*_*ZHU 0 c# linq unity-game-engine

我试图理解下面的代码:

Color32[] colors = mesh.colors32;
IEnumerable<IGrouping<byte, int>> hierarchyMap = colors.Select((color, index) => new { color, index }).GroupBy(c => c.color.g, c => c.index);
Run Code Online (Sandbox Code Playgroud)

我用google只找到了GroupBy(xxx)的一些教程(括号内只有一个参数),说明xxx是组的key。如果括号内有两个参数怎么办?

小智 5

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

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

假设我们有一Employee堂课

public class Employee
{
    public string Name { get; set; }
    public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后代码逻辑如下。

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}");
    }
}
Run Code Online (Sandbox Code Playgroud)

输出将是:

25
=> Dave
=> Tom
23
=> John
30
=> Michael
=> Bobby
21
=> Jane
Run Code Online (Sandbox Code Playgroud)

来自MSDN 的参考