目录
1.简要说明
2.官方文件
3.举例说明
3.1.默认排序Sort()
3.2Sort(IComparer comparer)
3.3Sort(Comparison comparison)
3.4Sort(int index, int count, IComparer comparer)
4.总结
泛型List命名空间为System.Collections.Generic,官网文档的Sort有4种重载方法:
//使用指定的比较器对 System.Collections.Generic.List`1 中某个范围内的元素进行排序 public void Sort(int index, int count, IComparer<T> comparer); //使用指定的 System.Comparison`1 对整个 System.Collections.Generic.List`1 中的元素进行排序 public void Sort(Comparison<T> comparison); //使用默认比较器对整个 System.Collections.Generic.List`1 中的元素进行排序 public void Sort(); //使用指定的比较器对整个 System.Collections.Generic.List`1 中的元素进行排序 public void Sort(IComparer<T> comparer);自定义的类要实现IComparable接口,最好用泛型<T>,要不然有拆箱操作
自带数据类型可以直接使用Sort();
举例写自定义薪水类,有名子、年龄、薪水值字段,更加指定字段排序
using System.Collections.Generic; using System; [Serializable] public class Salary : IComparable<Salary> { public string name; public int age; public int salaryNum; public Salary(string _name, int _age, int _salary) { name = _name; age = _age; salaryNum = _salary; } //Sort()默认调用方法 //实现泛型接口:IComparable<Salary> public int CompareTo(Salary other) { return salaryNum.CompareTo(other.salaryNum); } //实现接口:IComparable,不建议使用 //public int CompareTo(object obj) //{ // return salaryNum.CompareTo((obj as Salary).salaryNum); //} }调用list.Sort(),默认调用自定义类CompareTo()方法
public List<Salary> list; void Start() { list = new List<Salary>() { new Salary("1 Jim",15,1000), new Salary("2 Jack",10,2000), new Salary("3 Tom",20,800), new Salary("4 Luccy",40,4000), }; list.Sort(); }以下几种方法默认类,并初始化
using System.Collections.Generic; using System; [Serializable] public class Salary { public string name; public int age; public int salaryNum; public Salary(string _name, int _age, int _salary) { name = _name; age = _age; salaryNum = _salary; } }初始化,赋值
public List<Salary> list; void Start() { list = new List<Salary>() { new Salary("1 Jim",15,1000), new Salary("2 Jack",10,2000), new Salary("3 Tom",20,800), new Salary("4 Luccy",40,4000), }; }
正式开始Sort(IComparer<T> comparer)方法,自定义比较器
//自定义年龄比较器 public class AgeComparor : IComparer<Salary> { public int Compare(Salary x, Salary y) { return x.age.CompareTo(y.age); } }调用
list.Sort(new AgeComparor());
该方法不用先定义比较器
//根据名字排序 list.Sort((a, b) => { return a.name.CompareTo(b.name); }); //或者更加薪水值排序 //list.Sort((a, b) => { return a.salaryNum.CompareTo(b.salaryNum); });要先定义 AgeComparor();
list.Sort(1, 2, new AgeComparor());个人认为,第三种方法比较简洁,自定义类不用集成比较接口,也不用自定义比较器,在使用时根据自己的需求自定义排序方式,但要注意注意结构,里面是有两个参数的拉姆达表达式
list.Sort((a, b) => { return a.name.CompareTo(b.name); });