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; }
        }
    }
ListItem类

2,创建一个ListItem对象的数组ArrayListItem:

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小,那么返回值是正数,则后一个元素上浮。所以最终排列的结果是大的在前,是一个倒序排列。

 

posted on 2013-06-21 21:13  与君同行  阅读(668)  评论(0)    收藏  举报

导航