Enumerable.ToLookup メソッドなんてのがあるんですね
- ToLookupを使ってみる ( wa りと na はてな日記)
ToLookup メソッドの存在を知らなかったので MSDN で調べてみました。
- Enumerable.ToLookup メソッド (System.Linq) ( .NET Framework クラスライブラリ)
ほうほう。
IEnumerable
新しい事を知ったらまずは使ってみる、と云う事で早速テストコードを書いてみました。
# 普段は変数などには multi byte な文字列は使わない主義なんですが、今回のサンプルはどうにも日本語表記にした方がしっくりくる(ってか アルファベットだと書きにくかった)ので日本語にしました。
using System; using System.Collections.Generic; using System.Linq; namespace Jp.Mkns.Wankuma.Test { public enum Colors { 紅, 黄, 白 } public class Person { public Colors Color { get; set; } public string Name { get; set; } } public class ToLookupTest { static void Main() { var list = new List<Person>(); list.Add(new Person() { Color = Colors.紅, Name = "福沢祐巳" }); list.Add(new Person() { Color = Colors.黄, Name = "島津由乃" }); list.Add(new Person() { Color = Colors.白, Name = "藤堂志摩子" }); list.Add(new Person() { Color = Colors.紅, Name = "小笠原祥子" }); list.Add(new Person() { Color = Colors.黄, Name = "支倉玲" }); list.Add(new Person() { Color = Colors.紅, Name = "水野蓉子" }); list.Add(new Person() { Color = Colors.黄, Name = "鳥居江利子" }); list.Add(new Person() { Color = Colors.白, Name = "佐藤聖" }); list.Add(new Person() { Color = Colors.紅, Name = "松平瞳子" }); list.Add(new Person() { Color = Colors.白, Name = "二条乃梨子" }); list.Add(new Person() { Color = Colors.黄, Name = "有馬菜々" }); Console.WriteLine("----- 振り分け前 -----"); for (int i = 0; i < list.Count; i++) { Console.WriteLine("[{0,2}] Color = {1}, Name = {2}", i, list[i].Color, list[i].Name); } // Color で振り分け var lookup = list.ToLookup(item => item.Color); Console.WriteLine("----- 振り分け後 -----"); foreach (var group in lookup) { Console.WriteLine("キー : {0}", group.Key); var item = group.ToList(); for (int i = 0; i < item.Count; i++) { Console.WriteLine(" [{0}] Color = {1}, Name = {2}", i, item[i].Color, item[i].Name); } } } } }
実行結果。
----- 振り分け前 ----- [ 0] Color = 紅, Name = 福沢祐巳 [ 1] Color = 黄, Name = 島津由乃 [ 2] Color = 白, Name = 藤堂志摩子 [ 3] Color = 紅, Name = 小笠原祥子 [ 4] Color = 黄, Name = 支倉玲 [ 5] Color = 紅, Name = 水野蓉子 [ 6] Color = 黄, Name = 鳥居江利子 [ 7] Color = 白, Name = 佐藤聖 [ 8] Color = 紅, Name = 松平瞳子 [ 9] Color = 黄, Name = 二条乃梨子 [10] Color = 白, Name = 有馬菜々 ----- 振り分け後 ----- キー : 紅 [0] Color = 紅, Name = 福沢祐巳 [1] Color = 紅, Name = 小笠原祥子 [2] Color = 紅, Name = 水野蓉子 [3] Color = 紅, Name = 松平瞳子 キー : 黄 [0] Color = 黄, Name = 島津由乃 [1] Color = 黄, Name = 支倉玲 [2] Color = 黄, Name = 鳥居江利子 [3] Color = 黄, Name = 有馬菜々 キー : 白 [0] Color = 白, Name = 藤堂志摩子 [1] Color = 白, Name = 佐藤聖 [2] Color = 白, Name = 二条乃梨子
振り分けのキーは任意の型が指定出来る様ですね。これは結構使えるかも。
# (追記)壮大にデータをミスっていたので修正 ^^;;;