C#ArrayList-sort
2016-03-20 19:34
453 查看
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); } }
相关文章推荐
- C# 重载运算符
- 这个C#程序真了不起
- C#中protected用法详解
- 《深入.NET平台和C#编程》内部测试题
- C#中public、private、protected、internal、protected internal
- C#中的IEnumerable<T>知识点
- C#-WinForm中文本框的中文乱码问题
- c#Dictionary遍历
- C#代码分析(第三周)
- C#之继承
- BC#76.2DZY Loves Balls
- 编写C#程序,输出分数最高的同学的姓名和分数。
- C# kinect v2学习笔记(三) 彩色图像
- C#完整执行存储过程的代码加实例
- c# 多语言设置
- C# 委托 代理
- c#中调用windows api (按键精灵)
- C# 委托 代理
- 基于C#的单元测试(VS2015)
- C# kinect v2学习笔记(三)红外图像展示