45fan.com - 路饭网

搜索: 您的位置主页 > 电脑频道 > 编程代码 > 阅读资讯:如何对ArrayList的自定义元素进行排序?

如何对ArrayList的自定义元素进行排序?

2016-08-31 09:18:04 来源:www.45fan.com 【

如何对ArrayList的自定义元素进行排序?

ArrayList的自定义元素进行排序

ArrayList的Sort(IComparer)方法使用指定的比较器对整个 ArrayList 中的元素进行排序。向ArrayList中添加的自定义元素,当需要排序时,需要公开比较元素方法。

以下是一个例子。

先声明需要添加到ArrayList的自定义元素类型one:
public class One
{
public string N;
public int I;

public One(string n, int i)
{
N = n;
I = i;
}
}

公开比较元素方法:
ArrayList 比较元素时要使用 IComparer 实现。以下是三个比较器

比较器oneIComparer1实现比较两个One(按照One.N的升序排列)
public class oneIComparer1 : IComparer
{
int IComparer.Compare( Object x, Object y )
{
return string.Compare(((One)x).N,((One)y).N);
}
}

比较器oneIComparer2实现比较两个One(按照One.N的降序排列)
public class oneIComparer2 : IComparer
{
int IComparer.Compare( Object x, Object y )
{
return string.Compare(((one)y).N,((one)x).N);
}
}

比较器oneIComparer3实现比较两个One(按照One.I的升序排列)
public class oneIComparer3 : IComparer
{
int IComparer.Compare( Object x, Object y )
{
return ((One)x).I.CompareTo(((One)y).I);
}
}

ArrayList list = new ArrayList();

//向list添加三个类型为One的元素
list.Add(new One("a1",999));
list.Add(new One("a2",998));
list.Add(new One("a3",997));


//创建自定义比较器comparer1
comparer1 = new oneIComparer1();
//按照自定义比较器comparer1对list中的元素排序(升序排列)
list.Sort(comparer1);
//使用比较器comparer1在整个已排序的 list 中搜索One.N的值为"a3"的元素从零开始的索引。
list.BinarySearch(new One("a3",0),comparer1) 的值为2

//按照One.N的降序排列后搜索One.N的值为"a3"的元素从零开始的索引。
comparer2 = new oneIComparer2();
list.Sort(comparer2);
list.BinarySearch(new One("a3",0),comparer2) 的值为0

//搜索One.I的值为997的元素从零开始的索引。
comparer3 = new oneIComparer3();
list.Sort(comparer3);
list.BinarySearch(new One("",997),comparer3) 的值为0

为了代码更加清晰,并容易理解,可以给One添加一个构造函数
public One(string n)
{
N = n;
}

list.BinarySearch(new One("a3",0),comparer1)可改为:
list.BinarySearch(new One("a3"),comparer1)

 

本文地址:http://www.45fan.com/bcdm/70138.html
Tags: 元素 进行 ArrayList
编辑:路饭网
推广内容
推荐阅读
热门推荐
推荐文章
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部