📜  使用 LINQ 将序列划分为组的 C# 程序(1)

📅  最后修改于: 2023-12-03 15:36:31.781000             🧑  作者: Mango

使用 LINQ 将序列划分为组的 C# 程序

LINQ 是 .NET 平台上的一种语言集成查询(Language Integrated Query)技术,通过它可以使用类似 SQL 的语言来对各种数据集进行查询和操作。本文将介绍如何使用 LINQ 将序列划分为组。

准备工作

我们需要先创建一个包含多个元素的序列,比如以下代码:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
按照数值分组

如果我们想按照数值分组,可以使用 GroupBy 方法:

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

上面的代码将 List 类型的 numbers 序列按照奇偶性分成两组,分别是 "Even" 和 "Odd" 组。GroupBy 方法接受一个 Lambda 表达式,这个表达式接收一个 int 类型的 num 参数,如果 num 为偶数,则返回字符串 "Even",否则返回字符串 "Odd"。最后的结果是一个 IEnumerable<IGrouping<string, int>> 类型的 groups 变量。

我们可以遍历 groups 变量的每一个元素,打印组的 Key 值和组成员的值,代码如下:

foreach (var group in groups)
{
    Console.WriteLine(group.Key);
    foreach (var num in group)
    {
        Console.WriteLine(num);
    }
}

上述代码将按照奇偶性打印出数字序列的分组情况。

按照字符串长度分组

除了按照数值分组,我们也可以按照字符串长度分组。假设我们有一个字符串列表:

List<string> words = new List<string> { "cat", "dog", "bird", "elephant", "lion", "tiger", "zebra" };

我们可以使用另一个 GroupBy 方法来按照字符串长度分组:

var groups = words.GroupBy(word => word.Length);

上面的代码将 List 类型的 words 序列按照字符串长度分成了不同的组,每个组的 Key 值是字符串长度。最后的结果是一个 IEnumerable<IGrouping<int, string>> 类型的 groups 变量。

我们可以遍历 groups 变量的每一个元素,打印组的 Key 值和组成员的值,代码如下:

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

上述代码将按照字符串长度打印出字符串序列的分组情况。

总结

通过以上的代码示例,我们学会了如何使用 LINQ 的 GroupBy 方法将序列划分为组。这个技术可以方便地对各种数据集进行分组汇总,是每个 .NET 开发者都应该掌握的基本技能。