您的位置:首页 > 移动开发 > Objective-C

数组排序两种方法

2012-08-03 15:41 253 查看
1.第一个例子

     -------------------定义代码--------------------------------

    #region Array数组排序1

    public class Pigeon : IComparable<Pigeon>  //类元素本身继承比较接口

    {

        int XValue;

        int YValue;

        public string BatchNo { get; set; }

        public int CompareTo(Pigeon other)

        {

            if (other == null)

                throw new ArgumentNullException("比较参数为空");

            //按第三个字符比较

            XValue = Convert.ToInt32(this.BatchNo.Substring(2, 1));

            YValue = Convert.ToInt32(other.BatchNo.Substring(2, 1));

            if (XValue == YValue)

            {

                return 0;

            }

            else if (XValue < YValue)

            {

                return -1;      //返回-1,X排在Y的前面

            }

            else

            {

                return 1;       //返回1,X排在Y的后面

            }

        }

    }

    #endregion

   -------------------测试代码--------------------------------

        #region 测试Array数组排序1

        private void button3_Click(object sender, EventArgs e)

        {

            Pigeon[] pigeons = new Pigeon[]{

                new Pigeon(){BatchNo="1256"},

                new Pigeon(){BatchNo="1236"},

                new Pigeon(){BatchNo="1276"},

                new Pigeon(){BatchNo="1216"}

            };

            Array.Sort(pigeons);

            string ResultMsg = "";

            foreach (Pigeon o in pigeons)

            {

                ResultMsg += o.BatchNo + "\r\n";

            }

            MessageBox.Show(ResultMsg);

        }

        #endregion

1.第二个例子

    -------------------定义代码--------------------------------

    #region Array数组排序

    public class MyBatch      //数组元素类

    {

        public string BatchNo { get; set; }

    }

    public enum CompareType     //比较类型枚举

    {

        ThreeChar =0,

        FourChar=1

    }

    public class MyBatchCompare:IComparer<MyBatch>    //定义了一个比较类

    {

        private CompareType compareType;//定义排序类型

        public MyBatchCompare(CompareType compareType)

        {

            //构造函数中初始化比较类型

            this.compareType = compareType;

        }

        public int Compare(MyBatch x, MyBatch y)

        {

            int XValue;

            int YValue;

            if (x == null) throw new ArgumentNullException("x值为空");

            if (y == null) throw new ArgumentNullException("y值为空");

            switch (compareType)

            {                   

                case CompareType.ThreeChar:

                    //按第三个字符比较从小到大排序

                    XValue = Convert.ToInt32(x.BatchNo.Substring(2,1));

                    YValue = Convert.ToInt32(y.BatchNo.Substring(2,1));

                    if (XValue == YValue)

                    {

                        return 0;

                    }

                    else if (XValue < YValue)

                    {

                        return -1;      //返回-1,X排在Y的前面

                    }

                    else

                    {

                        return 1;       //返回1,X排在Y的后面

                    }

                case CompareType.FourChar:

                    //按第四个字符比较从小到大排序

                    XValue = Convert.ToInt32(x.BatchNo.Substring(3,1));

                    YValue = Convert.ToInt32(y.BatchNo.Substring(3,1));

                    if (XValue == YValue)

                    {

                        return 0;

                    }

                    else if (XValue < YValue)

                    {

                        return -1;      //返回-1,X排在Y的前面

                    }

                    else

                    {

                        return 1;       //返回1,X排在Y的后面

                    }

                default:

                    throw new ArgumentException("比较类型参数错误");

            }

        }

    }

    #endregion

    -------------------测试代码--------------------------------

        #region Array数组排序

        private void button2_Click(object sender, EventArgs e)

        {

            MyBatch[] batchs ={

                                  new MyBatch(){BatchNo="1234"},

                                  new MyBatch(){BatchNo="1263"},

                                  new MyBatch(){BatchNo="1218"},

                                  new MyBatch(){BatchNo="1242"}

                             };

            //按第三个字符从小到大排

            Array.Sort(batchs,new MyBatchCompare(CompareType.ThreeChar));

            string ResultMsg = "";

            foreach (MyBatch o in batchs)

            {

                ResultMsg += o.BatchNo + "\r\n";

            }

            MessageBox.Show(ResultMsg);

            //按第四个字符从小到大排序

            Array.Sort(batchs, new MyBatchCompare(CompareType.FourChar));

            ResultMsg = "";

            foreach (MyBatch o in batchs)

            {

                ResultMsg += o.BatchNo + "\r\n";

            }

            MessageBox.Show(ResultMsg);

        }

        #endregion
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息