从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<