ArrayList<ListItem>的排序
这是一个自己写比较器进行ArrayList<ListItem>排序的练习:
一、内容说明:
1,有一个类ListItem:

public class ListItem { private string myText;//文本 private string myValue;//值 public ListItem(string sText, string sValue) { this.myText = sText; this.myValue = sValue; } public string Text { get { return myText; } } public string Value { get { return myValue; } } }
2,创建一个ListItem对象的数组ArrayListItem:

var ArrayListItem = new ArrayList { new ListItem("Filing Language","LGF"), new ListItem("All Names", "ALLNAMES"), new ListItem("Main Inventor Name","INF"), };
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小,那么返回值是正数,则后一个元素上浮。所以最终排列的结果是大的在前,是一个倒序排列。