C#ArrayList-sort

ArrayList是一个类型为object的数组,属于非泛型容器。
arrList.Capacity属性表示当前对象数组的大小,初次创建一个对象时,默认是4。随着插入,当元素数量首次大于当前容量时,容量翻倍,每次都是当前容量乘2,一次是4,8,16...
arrList.Count表示数组中的元素个数。
今天我们讲的是arrList的Sort函数,有3个重载函数:
Sort(),没有参数,排序时调用接口IComparable的CompareTo方法来比较元素大小,只要数组中的元素所属的类实现IComparable接口,就可以调用次函数,否则会抛出异常。
Sort(IComparer comparer);函数的参数是一个接口对象,也就是说如果对数组中的元素想按多种规则排序,就必须实现该接口。
Sort(int index, int count, IComparer comparer)这个函数和上边的唯一区别是从某个索引开始的count个元素排序。
具体实验代码如下:
        static void TestArrayList()
        {
            ArrayList arrList = new ArrayList();
            arrList.Add("lisi");
            arrList.Add("zhangsan");
            arrList.Add("wangerxiao");
            arrList.Add("afanti");

            arrList.Sort();

            for (int i = 0; i < arrList.Count; i++)
            {
                Console.WriteLine(arrList[i]);
            }

            ArrayList arrListPerson = new ArrayList();
            arrListPerson.Add(new Person(16, "lixiang"));
            arrListPerson.Add(new Person(19, "zhangsan"));
            arrListPerson.Add(new Person(18, "wangjinfu"));
            arrListPerson.Add(new Person(22, "afei"));
            //sort by age esc
            //arrListPerson.Sort();


            //sort by age desc
            //arrListPerson.Sort(new SortByAgeDesc());

            //sort by name
            arrListPerson.Sort(new SortByNameEsc());

            for (int i = 0; i < arrListPerson.Count; ++i)
            {
                Console.WriteLine(arrListPerson[i].ToString());
            }
        }

  class Person : IComparable
    {
        int _age;

        public int Age
        {
            get { return _age; }
            set { _age = value; }
        }

        string _name;

        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }

        public Person()
        {
        }
        public Person(int age, string name)
        {
            Age = age;

            Name = name;
        }

        public int CompareTo(object obj)
        {
            Person p2 = (Person)obj;
            return this.Age - p2.Age;
        }

        public override string ToString()
        {
            return string.Format("[{0},{1}]", Age, Name);
        }
    }

    class SortByAgeDesc : IComparer
    {
        public int Compare(object x, object y)
        {
            Person p1 = (Person)x;
            Person p2 = (Person)y;

            return p2.Age - p1.Age;
        }
    }

    class SortByNameEsc : IComparer
    {
        public int Compare(object x, object y)
        {
            Person p1 = x as Person;
            Person p2 = y as Person;
            return string.Compare(p1.Name, p2.Name); 
        }
    }
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值