Linq学习总结(7)——分组
LINQ的分组功能是通过group by子句实现的。
group by的结果是存在一个IGrouping对象中的,含有一个Key/Element对。Key代表的是进行分组的凭据,而Element则是我们需要的数据。
static void Main(string[] args)
{
var nums = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var result = from n in nums group n by n % 2;
foreach (var item in result)
{
Console.WriteLine(item.Key == 0 ? "偶数" : "奇数");
foreach (var num in item)
{
Console.WriteLine(num);
}
}
}
group by关键字的使用实际是调用的GroupBy扩展方法,它有很多个重载的方法。此外它还有个GroupJoin这个扩展方法。关于它们的使用都可以上MSDN查看一下。
另外,还有一个扩展方法ToLookup也支持分组,它会创建一个带有键值对的Dictionary。通过Dictionary,你就可以获得一个键值对,而ToLookup所返回的键值对中,值部分本身又是一个对象集合。
static void Main(string[] args)
{
var students = new[]{
new {name="Lily",age=12},
new {name="Lucy",age=13},
new {name="Hank",age=12},
new {name="Toby",age=13},
new {name="Jack",age=15}
};
var groupByAge = students.ToLookup(
n => n.age,
m=>m.name
);
foreach (var group in groupByAge)
{
Console.WriteLine(group.Key);
foreach (var item in group)
{
Console.WriteLine("{0,6}",item);
}
}
}
浙公网安备 33010602011771号