C_sharp / Study / IComparer



はじめに

IComparerインターフェイス

interface IComparer
{
   int Compare (Object x, Object y);  // 2 つのオブジェクトを比較する。
}
  • 戻り値
    • 負: x が y より小さい。
    • 0 : x と y は等しい。
    • 正: x が y より大きい。
  • ざっとでしか調べていないがSystem.Array.Sort()で利用するみたい。
    • たしかにSortの方が単純な比較よりも利用価値は高いと思うが他の一般的な(?)利用法はまだ知らない。

コード

class MyComparer : System.Collections.IComparer
{
   public int Compare(object x, object y)
   {
       return (int)y - (int)x;  
   }
}
  • 通常の比較とは逆の戻り値を返すように計算している。降順でソートを行うため。

利用例

コード

int[] array = { 3, 1, 2 };
foreach (int i in array)
{
    Console.WriteLine(i);
}

Console.WriteLine("通常のソートの実行");
System.Array.Sort(array);
foreach (int i in array)
{
    Console.WriteLine(i);
}

Console.WriteLine("自作比較クラスでのソートの実行");
System.Array.Sort(array, new MyComparer());
foreach (int i in array)
{
    Console.WriteLine(i);
}
  • System.Array.Sort()の引数にはIComparerを指定してソートを行うことができる。
    • もちろん比較時にメンバ Compare()が利用される。
  • Strategyみたいなもんか。

出力

3
1
2
通常のソートの実行
1
2
3
自作比較クラスでのソートの実行
3
2
1

参考リンク

MenuBar


最新の20件

2015-05-15 2014-12-07 2008-11-17 2007-08-30 2007-04-21 2007-03-13 2007-03-12 2007-02-20 2007-02-14 2007-02-04 2006-11-26 2006-11-23 2006-11-20 2006-11-18 2006-11-13

  • counter: 474
  • today: 1
  • yesterday: 0
  • online: 1