C#ArrayList-sort
ArrayList是一个类型为object的数组,属于非泛型容器,arrList.Capacity属性表示当前对象数组的大小,初次创建一个对象时,默认是4,当元素首次大于当前容量时,容量翻倍,依次(4,8,16...);arrList.Count表示数组中的元素个数。今天我们讲的是arrList的Sort函数,有3个重载函数:Sort(),没有参数,排序时调用接口IComparable的Comp
·
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);
}
}
更多推荐
已为社区贡献1条内容
所有评论(0)