C#泛型-无参数的Sort排序方法
泛型的排序有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());
*/
}
}