📅  最后修改于: 2023-12-03 15:17:19.816000             🧑  作者: Mango
在LINQ中,我们可以使用ToLookup()
方法将序列分组为多个序列,每个序列都按照指定键的值进行分组。
public static ILookup<TKey, TSource> ToLookup<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector);
public static ILookup<TKey, TElement> ToLookup<TSource, TKey, TElement>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector);
ToLookup()
方法有两个重载方法:
接受一个键选择器函数,将序列按照键选择器函数返回的键值进行分组。返回一个ILookup<TKey, TSource>
类型的对象,其中TKey
为键的数据类型,TSource
为序列的数据类型。
接受一个键选择器函数和一个元素选择器函数,将序列按照键选择器函数返回的键值进行分组,并将元素选择器函数返回的元素添加到对应的键的值序列中。返回一个ILookup<TKey, TElement>
类型的对象,其中TKey
为键的数据类型,TElement
为元素的数据类型。
int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
ILookup<int, int> lookup = nums.ToLookup(n => n % 2);
foreach (var g in lookup)
{
Console.WriteLine("Key: " + g.Key);
Console.WriteLine("Values: " + string.Join(",", g.ToArray()));
}
上面的代码将int
类型的数组nums
按照元素模2的值进行分组,返回了一个ILookup<int, int>
类型的对象lookup
。通过foreach
循环遍历lookup
对象,分别输出了每个键的值以及对应的序列。
输出结果:
Key: 1
Values: 1,3,5,7,9
Key: 0
Values: 2,4,6,8
ToLookup()
方法返回的对象是一个只读的集合,不能修改其中的值。null
元素时,ToLookup()
方法会抛出ArgumentNullException
异常。