您的位置:首页 > 编程语言 > C#

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: