linqのgroupBy

http://devlights.hatenablog.com/entry/20091210/p2
http://d.hatena.ne.jp/chiheisen/20111031/1320068429
groupByは渡されたラムダ式の戻り値でグループを作り、「「各グループのリスト」のリスト」を戻す。抽象化されたブレーク処理。
正確には、IEnumerable>を戻す。
「各グループのリスト」は IGrouping にあたる。こればどのキーでグループ化されたのかという情報と、グループに含まれる要素のリストを持ったオブジェクトである。



使い方としては以下みたいな感じ。

var list = new[] {
  new { Name="name1", Group="A" }, 
  new { Name="name2", Group="A" }, 
  new { Name="name3", Group="B" }
};

var groupList = list.GroupBy(item => item.Group); // IEnumerable<IGrouping<TKey, TElement>>

foreach (var group in groupList) // IGrouping<TKey, TElement>
{
    Console.WriteLine("[group:{0}]", group.Key);
    foreach (var itemInGroup in group)
    {
        Console.WriteLine(itemInGroup.Name);
    }
}
// ■出力結果
// [group:A]
// name1
// name2
// [group:B]
// name3



リストリスト言ってるけど、IEnumerableは正確にはリストじゃなくシーケンスである。