您的位置:首页 > 其它

ArrayList<ListItem>的排序

2013-06-21 21:13 330 查看
这是一个自己写比较器进行ArrayList<ListItem>排序的练习:

一、内容说明:

1,有一个类ListItem:

var ArrayListItem = new ArrayList
{
new ListItem("Filing Language","LGF"),
new ListItem("All Names", "ALLNAMES"),
new ListItem("Main Inventor Name","INF"),
};


ListItem的数组ArrayListItem

3,上面ArryListItem中的各个ListItem不是按序排列的,如果将ArrayListItem作为数据源绑定显示到页面上,会发现显示比较混乱,所以我们需要对ArrayListItem进行排序。

因为ArrayListItem中的各个元素不能直接使用System.IComparable进行排序,所以我们要定义一个比较器:

public class ListItemCompare : IComparer
{
public int Compare(object x, object y)
{
return System.String.CompareOrdinal(((ListItem)x).Text, ((ListItem)y).Text);
}
}


这里,我们创建了一个ICompare的继承类,来重写了Compare方法,通过比较ListItem中Text的大小来排序。

最后,调用排序方法:

ArrayListItem.Sort(new ListItemCompare());


则,这时的ArrayListItem就是排好序的结果。

二、相关知识回顾:

1,比较器有两个参数a、b,我们认为第一个参数a在比较序列中是前一个,第二个参数b是后一个。比较器有一个返回结果。比较器使用的是冒泡排序。

当返回值是负数时,认为前一个元素小,则排列不变;返回值是正数时,认为后一个元素小,则后一个元素冒泡上浮。从而实现最终排序。

public int Compare(int a, int b)
{
return a - b;
}


如果要得到倒序排列的结果,那么只需要修改比较的内容就可以了。

public int Compare(int a, int b)
{
return b - a;
}


如果前一个元素a小,那么返回值是正数,则后一个元素上浮。所以最终排列的结果是大的在前,是一个倒序排列。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: