您的位置:首页 > 编程语言 > C#

C#泛型-无参数的Sort排序方法

2012-06-29 09:58 344 查看
泛型的排序有3种方法,分别是:
1、List<T>.Sort(),只能在集合元素实现了IComparable泛型接口时使用
2、List<T>.Sort(Comparison<T>),Comparison<T>是一个方法委托,它带有2个参数T,返回int类型,可以灵活指定如何排序,但是需要编码时手动指定如果排序;
3、List<T>.Sort(IComparer<T>),使用实现了IComparer<T>接口的类给集合排序,可以灵活指定如何排序,但是需预先定义好类的排序方法

这里介绍第一种方法:
首先定义一个类,用作集合的元素,并实现IComparable泛型接口,默认按年龄排序
using System;
using System.Collections.Generic;
/// <summary>
/// 学生类, 实现IComparable泛型接口,按年龄排序
/// </summary>
public class Student : IComparable<Student>
{
private string name;
// 姓名
public string Name
{
get { return name; }
set { name = value; }
}
private int age;
// 年龄
public int Age
{
get { return age; }
set { age = value; }
}

private string grade;
// 年级
public string Grade
{
get { return grade; }
set { grade = value; }
}
//构造函数
public Student(string name, int age, string grade)
{
this.name = name;
this.age = age;
this.grade = grade;
}
public override string ToString()
{
return this.name + "," + this.age.ToString() + "," + this.grade;
}
#region IComparable<Student> 成员
public int CompareTo(Student other)
{
return age.CompareTo(other.age);
}
#endregion
}

下面就开始排序了:
using System;
using System.Collections.Generic;
public class test
{
public static void Main()
{
List<Student> arr = new List<Student>();
arr.Add(new Student("张三", 7, "一年级"));
arr.Add(new Student("李四", 11, "二年级"));
arr.Add(new Student("王五", 21, "一年级"));
arr.Add(new Student("陈六", 8, "三年级"));
arr.Add(new Student("刘七", 15, "二年级"));

arr.Sort();// 会自动调用Student类的CompareTo方法,对集合里的元素进行快速排序

// 循环显示集合里的元素
arr.ForEach(delegate(Student item) { Console.WriteLine(item.ToString()); }); // 这句等效于下面2句
/*
foreach( Student item in arr)
Console.WriteLine(item.ToString());
*/
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: