之前在编程的时候一直都有用到Linq的GroupBy方法来给集合分组,但是一直不太清楚这个方法到底返回值是什么样的,今天找个时间来总结一下。
先看下官方给的释义:
// 摘要:
// 根据指定的键选择器函数对序列的元素进行分组。
//
// 返回结果:
// IEnumerable<IGrouping<TKey, TSource>> 在 C# 或 IEnumerable(Of IGrouping(Of TKey,
// TSource)) 中 Visual Basic 其中每个 System.Linq.IGrouping`2 对象包含一系列对象和一个密钥。
public static IEnumerable<IGrouping<TKey, TSource>> GroupBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector);
主要看下它的返回值: IEnumerable<IGrouping<TKey, TSource>>
其中,IEnumerable<T>是可枚举的所有非泛型集合的基接口,比如我们经常用的List<T>等;
IGrouping<TKey, TSource> 官方给的定义是:表示具有公共键的对象的集合。点进去看下接口内部
//
// 摘要:
// 表示具有公共键的对象的集合。
//
// 类型参数:
// TKey:
// 键的类型 System.Linq.IGrouping`2。
//
// TElement:
// 中的值的类型 System.Linq.IGrouping`2。
public interface IGrouping<out TKey, out TElement> : IEnumerable<TElement>, IEnumerable
{
//
// 摘要:
// 获取的键 System.Linq.IGrouping`2。
//
// 返回结果:
// 键 System.Linq.IGrouping`2。
TKey Key { get; }
}
只有一个Key字段。再结合定义,可以知道返回值就是一个个集合,并且提供一个字段来表示公共键。
接下来通过代码验