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); 
        }
    }
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐