e知識「e-chishiki.com」では、インドでの著名なIT著者、IT教育者、eセキュリティーの大家により作成された様々な種類のプログラミング言語に関する技術的なコンテンツを知識情報データーベースとして提供します。
C# プログラミングシリーズ
C# のコレクション クラス (3/3)
Yashavant Kanetkar
IComparer インターフェイス
IComparer インターフェイスでは、2 つのオブジェクトを比較するためのメソッドが提供されています。ほとんどのクラスはこのインターフェイスを実装しているので、同じクラスの 2 つのオブジェクトを簡単に比較できます。
IComparer インターフェイスを実装する方法を示すプログラムを作成してみます。このプログラムでは、従業員の情報を保持する emp クラスを記述します。もう 1 つのクラス mysort は、IComparer インターフェイスを実装します。プログラムを以下に示します。
using System ;
using System.Collections ;
namespace icomb
{
class emp
{
public string name ;
public int id ;
public float balance ;
public emp ( int i, string n, float b )
{
id = i ;
name = n ;
balance = b ;
}
public new string ToString( )
{
return id + " " + name + " " + balance ;
}
}
public class mysort : IComparer
{
public int Compare ( object a, object b )
{
int i1 = ( ( emp ) a ).id ;
int i2 = ( ( emp ) b ).id ;
string n1 = ( ( emp ) a ).name ;
string n2 = ( ( emp ) b ).name ;
if ( i1 == i2 )
{
return n1.CompareTo ( n2 ) ;
}
if ( i1 < i2 )
return -1 ;
return 1 ;
}
}
public class Class1
{
public static int Main ( string[ ] args )
{
emp[ ] e =
{
new emp ( 2, "Sanjay", 3450 ),
new emp ( 1, "Rahul", 2500 ) ,
new emp ( 10, "Kavita", 10000 ),
new emp ( 9, "Mohit", 25000),
new emp ( 6, "Sapna", 2500),
} ;
mysort s = new mysort( ) ;
Array.Sort ( e, s ) ;
foreach ( emp s1 in e )
Console.WriteLine ( s1.ToString( ) ) ;
return 0 ;
}
}
}
最初に emp 型の配列 e をインスタンス化し、続いて mysort 型のオブジェクトをインスタンス化します。mysort クラスでは、IComparer インターフェイスの Compare( ) メソッドを定義し、独自の並べ替えロジックを記述しています。次に、配列 e を並べ替えるために、Array クラスの Sort( ) メソッドを呼び出します。Sort( ) メソッドには、並べ替える配列と IComparer インターフェイスへの参照を渡す必要があります。Sort( ) メソッドは Compare( ) メソッドを呼び出します。Compare( ) メソッドは、比較対象のオブジェクトが等しいか、または一方が他方より小さいかどうかを示す、0、1、または -1 を返します。この例では、mysort クラスは IComparer から派生するので、mysort のオブジェクトへの参照を渡しています。したがって、mysort クラスの Compare( ) メソッドが呼び出されます。
配列を並べ替えた後、配列の要素を表示します。emp クラスで ToString( ) メソッドをオーバーライドしています。これは、s1.ToString( ) というステートメントを使用して、並べ替えた要素を表示しようとしているためです。emp クラスでこのメソッドをオーバーライドしないと、基本クラスの ToString( ) が呼び出されますが、それは好ましくありません。emp クラスの ToString( ) では、データメンバの値を文字列で連結して、返しています。



