|
|
連載:[完全版]究極のC#プログラミング
Chapter15 LINQとクエリ式
川俣 晶
2010/03/17 |
|
|
15.12 シンプルなソート
foreach文を使った単なる列挙に対するLINQの長所の1つは、簡単にソートができることだろう。orderby句をクエリ式に追加するだけである。
リスト15.11は、与えられた数値のマイナス符号を無視し、値の大きい順に並べ替える例である。
using System;
using System.Linq;
class Program
{
static void Main(string[] args)
{
int[] array = { -2, -1, 0, 1, 2 };
var query = from x in array
orderby Math.Abs(x) descending select x;
foreach (int n in query) Console.WriteLine(n);
// 出力:
// -2
// 2
// -1
// 1
// 0
}
}
|
|
リスト15.11 絶対値の逆順ソート |
ここで、「orderby Math.Abs(x) descending」という部分がソートの指定に当たる。「Math.Abs(x)」はソートの根拠になる値を計算する式となる。「descending」は逆順(降順)を指定するキーワード(昇順を指定するキーワードはascending)で、これは省略できる。
さて、この実行結果を見ると、2よりも先に-2がきている。Math.Abs(2)とMath.Abs(-2)はどちらも2になるので、-2という値だけではどちらが先にくるか思いどおりに制御できない(ただし、順序が保存された安定した並べ替えを行うので、結果は一定している)。
しかし、orderby句はソート条件を複数指定できるので、カンマで区切り、もう1つの条件を付加すれば、思いどおりにコントロールできる。-2よりも2を先にするには、絶対値ではない値の降順(x descending)を追加すればよい(リスト15.12参照)。
var query = from x in array
orderby Math.Abs(x) descending, x descending select x;
|
|
リスト15.12 複数のソート条件を指定したクエリ |
この場合の実行結果は次のようになる。
Insider.NET 記事ランキング
本日
月間