欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » C# » 正文

热门阅读

C#中实现List泛型自定义排序示例

创建时间:2011年11月29日 11:07  阅读次数:(41231)
分享到:
从asp.net2.0后,List泛型就成了我们常用的一个类了。它基本上取代了之前的ArrayList类。

本章我们不讨论List与ArrayList的差异,仅讨论如何在List泛型中实现自定义排序。
我们先新建一个Person类,用来作为List中的对象,这里仅为Person添加名字和年龄两个属性,能够演示出我们排序的功能即可:
public class Person
{
/// <summary >
/// 名字
/// </summary >
public string Name
{
get;
set;
}

/// <summary >
/// 年龄
/// </summary >
public int Age
{
get;
set;
}

public Person(string name, int age)
{
this.Name = name;
this.Age = age;
}
}


然后我们新建一个ComparerPersonForList类,用来定义根据Person的Age从小到大排序的规则,因为它要实现排序,所以必须要继承IComparer类。
public class ComparerPersonForList : IComparer<Person >
{
public int Compare(Person x, Person y)
{
if (x.Age  > y.Age)
{
return 1;
}
else if (x.Age == y.Age)
{
return 0;
}
else
{
return -1;
}
}
}

了解一下IComparer接口
IComparer主要用来比较两个对象的大小。如果返回值小于0,则表示前一个对象小于后一个对象,返回值等于0,则表示两个对象相等,返回值大于0,则表示前一个对象大于后一个对象。

IComparer的定义如下:
public interface IComparer<T >
{
int Compare(T x, T y);
}


好了,有了ComparerPersonForList类,我们就可以根据List的Sort方法来排序了,全部示例代码如下:
using System;
using System.Collections.Generic;
using System.Collections;

namespace WebApplication1
{
public class Person
{
/// <summary >
/// 名字
/// </summary >
public string Name
{
get;
set;
}

/// <summary >
/// 年龄
/// </summary >
public int Age
{
get;
set;
}

public Person(string name, int age)
{
this.Name = name;
this.Age = age;
}
}

public class ComparerPersonForList : IComparer<Person >
{
public int Compare(Person x, Person y)
{
if (x.Age  > y.Age)
{
return 1;
}
else if (x.Age == y.Age)
{
return 0;
}
else
{
return -1;
}

}
}

public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
List<Person > list = new List<Person >();
list.Add(new Person("小明", 20));
list.Add(new Person("小亮", 18));
list.Add(new Person("小张", 25));

Response.Write("未排序前的数据!<br / >");
foreach (Person p in list)
{
Response.Write("姓名:" + p.Name + "--年龄:" + p.Age + "<br / >");
}

Response.Write("<br / ><br / >排序后的数据!<br / >");
list.Sort(new ComparerPersonForList());
foreach (Person p in list)
{
Response.Write("姓名:" + p.Name + "--年龄:" + p.Age + "<br / >");
}
}
}
}

输出结果:
未排序前的数据!
姓名:小明--年龄:20
姓名:小亮--年龄:18
姓名:小张--年龄:25


排序后的数据!
姓名:小亮--年龄:18
姓名:小明--年龄:20
姓名:小张--年龄:25

从结果上看,已经实现我们要想的排序了。List.Sort有四个重载方法,每个重载的方法需要实现的排序规则不一样,大家可以根据自己的实现情况来使用不同的重载。~T孴Z€T 鉙孴鐍b{|剉 愰bI{ENb哊b霳剉蛻筽0<
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论1条
  • #1楼  评论人:匿名  评论时间:2011-12-7 17:07:45
  • 谢谢了,学习了。
发表评论:
留言人:
内  容:
请输入问题 6+23=? 的结果(结果是:29)
结  果: