C# 入門 & 実践 / C sharp

4-11. [ ジェネリック/コレクション ] 5. IComparable インターフェイスの実装!独自のクラスをSort!


IComparable を実装して
CompareTo メソッドを実装することにより、そのクラスは、ListなどSortメソッドを持つクラスに入れたときにソートできるようになります!

IComparable を実装して、public int CompareTo(BbNumber other)の中に
背番号の大小比較結果を返す部分を書くだけです!^-^。

    class BbNumber : IComparable<BbNumber>
    {
        private string name = "";
        private int number = 0;
        public BbNumber(string name, int number)
        {
            this.name = name;
            this.number = number;
        }
        public void Print()
        {
            Console.WriteLine("{0} : {1}",number,name);
        }

        public int Number
        {
            get
            {
                return number;
            }
        }

        #region IComparable<BbNumber> メンバ

        public int CompareTo(BbNumber other)
        {
            return number - other.Number;
        }

        #endregion
    }

    class Tester
    {
        static void Main()
        {
            List<BbNumber> bblist = new List<BbNumber>();

            // マンチェスターユナイテッドの選手・背番号・並べ替え^-^。
            bblist.Add(new BbNumber("Rooney" , 8));
            bblist.Add(new BbNumber("Saha" , 10));
            bblist.Add(new BbNumber("Ronaldo" , 7));
            bblist.Add(new BbNumber("Neville" , 2));
            bblist.Add(new BbNumber("Ferdinand" , 5));
            bblist.Add(new BbNumber("Van der Sar", 1));

            // ソート前の並び
            Console.WriteLine(" + ソート前 +++");
            foreach (BbNumber bx in bblist)
            {
                bx.Print();
            }
            bblist.Sort();
            // ソート後の並び
            Console.WriteLine(" + ソート後 +++" );
            foreach (BbNumber bx in bblist)
            {
                bx.Print();
            }
            bblist.Reverse();
            // リバース後の並び
            Console.WriteLine(" + リバース後 +++");
            foreach (BbNumber bx in bblist)
            {
                bx.Print();
            }
        }
    }

+ ソート前 +++
8 : Rooney
10 : Saha
7 : Ronaldo
2 : Neville
5 : Ferdinand
1 : Van der Sar
+ ソート後 +++
1 : Van der Sar
2 : Neville
5 : Ferdinand
7 : Ronaldo
8 : Rooney
10 : Saha
+ リバース後 +++
10 : Saha
8 : Rooney
7 : Ronaldo
5 : Ferdinand
2 : Neville
1 : Van der Sar

見事!背番号順に並びましたね^-^。




4-10. [ ジェネリック/コレクション ] 4. List<T> の使用 « 4. C# 入門 Level 2 » 4-12. [ ジェネリック/コレクション ] 6. Queue / Stack クラスを使う。


C# 入門 & 実践 / C sharp