連載:[完全版]究極のC#プログラミング

Chapter16 LINQとメソッド構文

川俣 晶
2010/03/29
Page 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

16.8 orderbyの比較オブジェクト

 さて、上記リスト16.9の例はメソッド構文を使うと、もう1つ別のスタイルに書き換えることができる。これは、クエリ式では記述できないがメソッド構文で記述できる事例の1つである。

 上記のサンプルコードは、リスト16.10のように書き直すと、ThenByDescendingメソッドも複数のソート条件の記述も抜きで、同等条件の並べ替えを行うことができる。

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
  class Comparer : IComparer<int>
  {
    public int Compare(int x, int y)
    {
      int result = Math.Abs(x) - Math.Abs(y);
      if (result == 0) return x - y;
      return result;
    }
  }

  static void Main(string[] args)
  {
    int[] array = { -2, -1, 0, 1, 2 };

    var query = array.OrderByDescending((x) => x, new Comparer());

    foreach (int n in query) Console.WriteLine(n);
  }
}
リスト16.10 カスタム比較オブジェクトで比較する

 このコードのポイントは、OrderByDescendingメソッドの第2引数に指定された比較オブジェクトである。このような比較オブジェクトは、比較の条件が込み入ったとき、同じ条件を何回も比較のために使い回すときにあると便利な存在である。いたずらにクエリ式を長く書くよりも、このような比較オブジェクトを用意すればコードがスマートになることもあるだろう。そのようなスマートさを得るには、メソッド構文を使わなければならない。


 INDEX
  [完全版]究極のC#プログラミング
  Chapter16 LINQとメソッド構文
    1.16.1 予約語のエスケープ
    2.16.2 メソッド構文のLINQ
    3.16.3 クエリ式とメソッド構文の違い
    4.16.4 絞り込みと結果の生成
    5.16.5 最初の事例の別解
    6.16.6 メソッド構文でのみ可能なクエリ
    7.16.7 メソッド構文のソート
  8.16.8 orderbyの比較オブジェクト
    9.16.9 メソッド構文の複数のソースからクエリする
    10.16.10 メソッド構文のクエリの接続
    11.16.11 クエリ結果のグループ化
    12.16.12 メソッド構文で複数のソースを関連付ける
    13.16.13 メソッド構文のグループ化結合
    14.16.14 メソッド構文の左外部結合
    15.16.15 メソッド構文のlet句/【Exercise】練習問題
 
インデックス・ページヘ  「[完全版]究極のC#プログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間