GroupBy はソートしない。そりゃそうなんだけど、なぜかソートすると思ってた。
//データ構造。 class GTest { public int c1; public int c2; } //テストデータの集合。 List<GTest> r = new List<GTest> (); r.Add ( new GTest () { c1 = 3, c2 = 1, } ); r.Add ( new GTest () { c1 = 3, c2 = 2, } ); r.Add ( new GTest () { c1 = 1, c2 = 1, } ); r.Add ( new GTest () { c1 = 2, c2 = 1, } ); r.Add ( new GTest () { c1 = 1, c2 = 2, } ); r.Add ( new GTest () { c1 = 2, c2 = 2, } );Linq.
//GroupBy var t1 = r.GroupBy ( x => x.c1 ); foreach ( var t in t1 ) { Console.WriteLine ( ">> GB:{0}", t.Key ); } //GroupBy + OrderBy var t2 = r.GroupBy ( x => x.c1 ).OrderBy ( x => x.Key ); foreach ( var t in t2 ) { Console.WriteLine ( ">> GO:{0}", t.Key ); }Result:
//GroupBy - 格納した順序。 >> GB:3 >> GB:1 >> GB:2 //GroupBy + OrderBy - ソートした順序。 >> GO:1 >> GO:2 >> GO:3