C#集合排序
标签:ever 结果 height 动态 err 基础 方法 name 类型
1.对基础类型进行排序
调用Sort()方法,如果需要降序
1 Listint> intList = new Listint>() { 1, 2, 3 };
2 intList.Sort();
3 foreach (int number in intList)
4 {
5 Console.WriteLine(number);
6 }
7 intList.Reverse();
8 foreach (int number in intList)
9 {
10 Console.WriteLine(number);
11 }
12 Console.ReadKey();
2.对非基本类型进行排序,里面有两个属性,重写了ToString方法
1 class Student
2 {
3 private int studentId;
4 private string studentName;
5
6 public int StudentId { get => studentId; set => studentId = value; }
7 public string StudentName { get => studentName; set => studentName = value; }
8 //重写构造方法
9 public override string ToString()
10 {
11 return "studentId:" + studentId + " studentName:" + studentName;
12 }
13 }
然后添加一些数据,仍希望用Sort排序
1 List studentList = new List();
2 Student objStu1 = new Student() { StudentId = 1, StudentName = "小王" };
3 Student objStu2 = new Student() { StudentId = 2, StudentName = "小李" };
4 Student objStu3 = new Student() { StudentId = 3, StudentName = "小范" };
5 studentList.Add(objStu1);
6 studentList.Add(objStu2);
7 studentList.Add(objStu3);
8 studentList.Sort();
9 foreach (Student objStu in studentList)
10 {
11 Console.WriteLine(objStu);
12 }
13 Console.ReadKey();
然后就出错了,出错信息如下:
查看Sort源码可知它有如下几个重载
3.实现IComparable接口(默认排序)
可以看到它只有一个方法,我们只需要修改类本身
1 class Student:IComparable 2 {
3 private int studentId;
4 private string studentName;
5
6 public int StudentId { get => studentId; set => studentId = value; }
7 public string StudentName { get => studentName; set => studentName = value; }
8
9 //实现接口
10 // 返回结果:
11 // 一个值,指示要比较的对象的相对顺序。 返回值的含义如下:
12 // 值 含义 小于零 此实例在排序顺序中位于 other 之前。
13 //零 此实例中出现的相同位置在排序顺序中是
14 // other。 大于零 此实例在排序顺序中位于 other 之后。
15 public int CompareTo(Student other)
16 {
17 return this.studentId.CompareTo(other.studentId);
18 }
19
20 //重写构造方法
21 public override string ToString()
22 {
23 return "studentId:" + studentId + " studentName:" + studentName;
24 }
25 }
运行结果:
4.集合的动态排序
定义4个排序类,并且分别实现排序接口
1 class Student : IComparable 2 {
3 private int studentId;
4 private string studentName;
5
6 public int StudentId { get => studentId; set => studentId = value; }
7 public string StudentName { get => studentName; set => studentName = value; }
8
9 //实现接口
10 // 返回结果:
11 // 一个值,指示要比较的对象的相对顺序。 返回值的含义如下: 值 含义 小于零 此实例在排序顺序中位于 other 之前。 零 此实例中出现的相同位置在排序顺序中是
12 // other。 大于零 此实例在排序顺序中位于 other 之后。
13 public int CompareTo(Student other)
14 {
15 return this.studentId.CompareTo(other.studentId);
16 }
17
18 //重写构造方法
19 public override string ToString()
20 {
21 return "studentId:" + studentId + " studentName:" + studentName;
22 }
23 }
24 //添加4个排序类,并且分别实现排序接口
25 class StuNameASC : IComparer26 {
27 public int Compare(Student x, Student y)
28 {
29 return x.StudentName.CompareTo(y.StudentName);
30 }
31 }
32 class StuNameDESC : IComparer33 {
34 public int Compare(Student x, Student y)
35 {
36 return y.StudentName.CompareTo(x.StudentName);
37 }
38 }
39
40 class StudentIdASC : IComparer41 {
42 public int Compare(Student x, Student y)
43 {
44 return x.StudentId.CompareTo(y.StudentId);
45 }
46 }
47 class StudentIdDESC : IComparer48 {
49 public int Compare(Student x, Student y)
50 {
51 return y.StudentId.CompareTo(x.StudentId);
52 }
53 }
1 在排序时使用Sort的重载方法
2 public void Sort(IComparer comparer);
3 传递的是实现这个接口的类的对象
4 studentList.Sort(new StudentIdASC):表示的是按照学号升序排列
结果如下:
5.总结
泛型集合中基本数据类型可以直接排序,非基本数据类型要自定义排序方法
C#集合排序
标签:ever 结果 height 动态 err 基础 方法 name 类型
原文地址:https://www.cnblogs.com/fanjianzhi/p/12848302.html
文章来自:
搜素材网的
编程语言模块,转载请注明文章出处。
文章标题:
C#集合排序
文章链接:http://soscw.com/index.php/essay/47596.html
评论