Home / 記事 / プログラム言語 / C# / C# のコレクション クラス (3/3)

e知識「e-chishiki.com」では、インドでの著名なIT著者、IT教育者、eセキュリティーの大家により作成された様々な種類のプログラミング言語に関する技術的なコンテンツを知識情報データーベースとして提供します。

C# プログラミングシリーズ

C# のコレクション クラス (3/3)

Yashavant Kanetkar
Yashavant Kanetkar

効率のよいプログラムを作成するには、適切なデータ構造を適切な場所で使用することが重要です。リンクリストの代わりに配列を使用すると、またはその逆を行うと、場合によってはプログラムが正しく実行されない可能性があります。とはいっても、C# プログラムを記述していて、リンクリストの作成方法が気になることはほとんどありません。注意を払う必要のあるもっと重要なことがあります。.NET のコレクションクラスを使用すると、データ構造を管理できます。.NET の System.Collections 名前空間には、オブジェクトのコレクションを表すさまざまなインターフェイスとクラスが含まれます。リスト、キュー、配列、ハッシュテーブル、ディクショナリなどです。これらのクラスとインターフェイスについて順に説明します。

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( ) では、データメンバの値を文字列で連結して、返しています。

コメント

コメントするにはログイン、もしくはユーザ登録を行ってください。

発売中

LET US C(上)
インド人ITエンジニアのCプログラミングのバイブル。通算100万冊以上売れています。
― 2,520円 ―

Y. Kanetkar

発売中

Introduction to Object Oriented Programming & C++
C++を例に、多彩なサンプルコードと簡潔な説明でOOPプログラミングの実際が理解できる。
2,940

Y. Kanetkar

発売中

Microsoft .NET Web Application Security
APプログラムの作り方で不正侵入の防御率を向上させる手法を解説。今までにないセキュリティーの手法を紹介します。
3,990円

Vijay Mukhi

2008年の11月発売予定

Quest C++ ビジュアルラーニングコース
これがあれば、見て聞くだけで楽しみながらプログラミングテクニックが身につきます。
― 9,975円 ―

Y. Kanetkar Asang Dani

2008年の11月発売予定

Programmer's Guide to Web Application Security
Web System への侵入方法と原理を解説する事により、防止方法を理解することが出来る。
3,990

Vijay Mukhi

フォーラムの最新ポスト