📜  LINQ |分组运算符|通过…分组(1)

📅  最后修改于: 2023-12-03 14:43:54.317000             🧑  作者: Mango

LINQ | 分组运算符 | 通过...分组

在LINQ(Language Integrated Query)中,分组运算符可以通过指定一个键来按照指定的条件将序列分组。分组运算符在LINQ查询中非常有用,因为它允许程序员根据他们所需的逻辑将数据进行分组。

分组运算符

以下是LINQ中的一些常用的分组运算符:

  • GroupBy:根据指定的键将序列中的元素进行分组。
  • ToLookup:根据指定的键将序列中的元素进行分组并创建一个查找表。
GroupBy 分组运算符

GroupBy 是LINQ查询中最常用的分组运算符之一。它接受一个键选择器函数,该函数定义了将元素映射到可用于分组的键。然后,GroupBy 方法根据这些键值将元素进行分组。

以下是使用 GroupBy 方法的基本语法:

var groups = collection.GroupBy(x => x.Key);

在上面的代码中,collection 是要进行分组操作的序列,Key 是每个元素中用作键的属性或值。GroupBy 方法返回一个 IEnumerable<IGrouping<TKey, TElement>> 类型的结果,它代表了分组结果。

返回的结果可以通过 foreach 循环遍历,每个组都是一个 IGrouping<TKey, TElement> 对象,其中 TKey 是键类型,TElement 是源集合中元素的类型。

以下是一个示例,演示如何使用 GroupBy 方法将整数列表按照奇偶分成两组:

var numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

var groups = numbers.GroupBy(x => x % 2 == 0 ? "Even" : "Odd");

foreach (var group in groups)
{
    Console.WriteLine($"Group: {group.Key}");

    foreach (var number in group)
    {
        Console.WriteLine(number);
    }
}

输出结果:

Group: Odd
1
3
5
7
9
Group: Even
2
4
6
8
10
ToLookup 分组运算符

ToLookup 是另一个分组运算符,它类似于 GroupBy,但返回的结果是一个 ILookup<TKey, TElement> 对象,而不是一个 IEnumerable<IGrouping<TKey, TElement>>

以下是使用 ToLookup 方法的基本语法:

var lookup = collection.ToLookup(x => x.Key);

GroupBy 相比,使用 ToLookup 可以更方便地创建一个查找表。查找表可以像字典一样使用,通过键来查找相应的元素。

以下是一个示例,演示如何使用 ToLookup 方法创建一个查找表,以便根据年龄检索人员信息:

var persons = new List<Person>
{
    new Person { Name = "Alice", Age = 25 },
    new Person { Name = "Bob", Age = 30 },
    new Person { Name = "Charlie", Age = 25 },
    new Person { Name = "David", Age = 30 }
};

var lookup = persons.ToLookup(x => x.Age);

foreach (var person in lookup[25])
{
    Console.WriteLine($"{person.Name}, {person.Age} years old");
}

输出结果:

Alice, 25 years old
Charlie, 25 years old
总结

在LINQ查询中,分组运算符(如 GroupByToLookup)可以通过指定一个键将元素分组。它们提供了一种便捷的方式来处理和组织数据。通过适当使用分组运算符,程序员可以更加灵活地操作和处理序列数据。

以上是关于LINQ分组运算符的介绍,希望对程序员有所帮助!

**注意:请根据实际情况将代码片段适配到Markdown格式中。