本文由机器翻译。若要查看英语原文,请勾选“英语”复选框。 也可将鼠标指针移到文本上,在弹出窗口中显示英语原文。
翻译
英语

Enumerable.GroupBy<TSource, TKey, TResult> 方法 (IEnumerable<TSource>, Func<TSource, TKey>, Func<TKey, IEnumerable<TSource>, TResult>)

 

根据指定的键选择器函数对序列中的元素进行分组,并且从每个组及其键中创建结果值。

命名空间:   System.Linq
程序集:  System.Core(位于 System.Core.dll)

public static IEnumerable<TResult> GroupBy<TSource, TKey, TResult>(
	this IEnumerable<TSource> source,
	Func<TSource, TKey> keySelector,
	Func<TKey, IEnumerable<TSource>, TResult> resultSelector
)

参数

source
Type: System.Collections.Generic.IEnumerable<TSource>

IEnumerable<T> 其元素进行分组。

keySelector
Type: System.Func<TSource, TKey>

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

resultSelector
Type: System.Func<TKey, IEnumerable<TSource>, TResult>

用于从每个组中创建结果值的函数。

返回值

Type: System.Collections.Generic.IEnumerable<TResult>

类型的元素的集合 TResult 其中的每个元素都表示对一组及其键的投影。

类型参数

TSource

中的元素的类型 source

TKey

返回的键的类型 keySelector

TResult

返回的结果值的类型 resultSelector

在查询表达式语法 group by (Visual C#) 或 Group By Into (Visual Basic) 子句转换为的一个调用 GroupBy

下面的代码示例演示如何使用 GroupBy<TSource, TKey, TResult>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TKey, IEnumerable<TSource>, TResult>) 组合的一系列元素和项目类型的结果的序列 TResult

class Pet
{
    public string Name { get; set; }
    public double Age { get; set; }
}

public static void GroupByEx3()
{
    // Create a list of pets.
    List<Pet> petsList =
        new List<Pet>{ new Pet { Name="Barley", Age=8.3 },
                       new Pet { Name="Boots", Age=4.9 },
                       new Pet { Name="Whiskers", Age=1.5 },
                       new Pet { Name="Daisy", Age=4.3 } };

    // Group Pet objects by the Math.Floor of their age.
    // Then project an anonymous type from each group
    // that consists of the key, the count of the group's
    // elements, and the minimum and maximum age in the group.
    var query = petsList.GroupBy(
        pet => Math.Floor(pet.Age),
        (age, pets) => new
        {
            Key = age,
            Count = pets.Count(),
            Min = pets.Min(pet => pet.Age),
            Max = pets.Max(pet => pet.Age)
        });

    // Iterate over each anonymous type.
    foreach (var result in query)
    {
        Console.WriteLine("\nAge group: " + result.Key);
        Console.WriteLine("Number of pets in this age group: " + result.Count);
        Console.WriteLine("Minimum age: " + result.Min);
        Console.WriteLine("Maximum age: " + result.Max);
    }

    /*  This code produces the following output:

        Age group: 8
        Number of pets in this age group: 1
        Minimum age: 8.3
        Maximum age: 8.3

        Age group: 4
        Number of pets in this age group: 2
        Minimum age: 4.3
        Maximum age: 4.9

        Age group: 1
        Number of pets in this age group: 1
        Minimum age: 1.5
        Maximum age: 1.5
    */
}

通用 Windows 平台
自 8 起可用
.NET Framework
自 3.5 起可用
可移植类库
可移植 .NET 平台 中受支持
Silverlight
自 2.0 起可用
Windows Phone Silverlight
自 7.0 起可用
Windows Phone
自 8.1 起可用
返回页首
显示: