2010年5月17日 星期一

針對Array實作自訂的排序。

常常在陣列存放的不是實值型別,但是又需要排序的時候該如何事好呢?



以下展示了針對特定的型別排序的實作。

首先訂義類別:
        public class MyClass
        {
            private int _Value;
            public int Value
            {
                get
                {
                    return this._Value;
                }
                set
                {
                    this._Value = value;
                }
            }

            private string _Name;
            public string Name
            {
                get
                {
                    return this._Name;
                }
                set
                {
                    this._Name = value;
                }
            }
        }

定義一個排序時所需要的介面實作。
以下程式碼的關鍵是Return的Value,調整一下程式碼就可以改變排序的結果。

public  class MyClassComper : IComparer<MyClass>
        {
            public int Compare(MyClass x, MyClass y)
            {
                if (x.Value == y.Value)
                {
                    return 0;
                }
                if (x.Value > y.Value)
                {
                    return 1;
                }
                else
                {
                    return -1;
                }
            }

        }


接下來程式排序主體。


MyClass[] ar = new MyClass[2];
            ar[0] = new MyClass();
            ar[0].Name = "lei";
            ar[0].Value = 2;

            ar[1] = new MyClass();
            ar[1].Name = "jay";
            ar[1].Value = 9;

            ar[2] = new MyClass();
            ar[2].Name = "gray";
            ar[2].Value = 1;

            Array.Sort(ar, new MyClassComper());

沒有留言:

張貼留言