C#入门集合中对象排序

一、如果是基本数据类型元素,可以直接排序;

1  //创建一个泛型集合并初始化;
2             List<string> nameList = new List<string>() { "3小明", "1小王", "2小林", "5小周", "4小郭" };
3 //基本数据类型,直接调用sort()实现排序;
4             nameList.Sort();
5             Console.WriteLine("=====初始状态======");
6             foreach (var item in nameList)
7             {
8                 Console.WriteLine(item);
9             }

 

二、如果是对象类型元素

1、当排序只有一种的时候,可以使用默认比较器IComparable<T>在类中直接实现接口即可;

当对集合对象进行排序的时候,需要使用接口来实现默认排序;

 1     class Student:IComparable<Student>//默认的排序,只能有一种
 2     {
 3         public Student()//无参数构造函数
 4         {
 5 
 6         }
 7         public Student(int stuId,string stuName)//带两个参数的构造函数
 8         {
 9             this.StudentId = stuId;
10             this.StudentName = stuName;
11         }
12         public int StudentId { get; set; }
13         public string  StudentName { get; set; }
14         public int Age { get; set; }
15 
16         public int CompareTo(Student other)
17         {
18             return other.StudentId.CompareTo(this.StudentId);
19             //this 在前,other在后是升序,反之降序
20 
21         }
22     }

最终在使用时候直接调用sort()来实现排序,编译器直接调用接口实现类;

 1  //创建几个学员对象
 2             Student objStudent1 = new Student(1001, "小明");
 3             Student objStudent2 = new Student(1002, "小王");
 4             Student objStudent3 = new Student(1003, "小林");
 5             Student objStudent4 = new Student(1004, "小周");
 6             Student objStudent5 = new Student(1005, "小郭");
 7             List<Student> objStu = new List<Student>() { objStudent3 , objStudent5 , objStudent1 , objStudent4 , objStudent2 };
 8             Console.WriteLine("=====对象排序前=======");
 9             foreach (var item in objStu)
10             {
11                 Console.WriteLine(item.StudentId+"\t"+item.StudentName);
12             }
13             //默认排序
14             objStu.Sort();
15             Console.WriteLine("=====对象默认排序后=======");
16             foreach (var item in objStu)
17             {
18                 Console.WriteLine(item.StudentId + "\t" + item.StudentName);
19             }
20            Console.ReadLine();

 

2、当需要多种排序的时候,需要田间对应排序类,并给每个排序类实现比较器接口ICompare<T>来完成不同的排序方法;

首先在对象类中,实现是个排序类接口:

 1 //添加四个排序类,需要几种排序,就添加几个排序类;并且分别实现排序比较接口,实现动态排序
 2     #region 四个排序类
 3     class StuNameAsc : IComparer<Student>
 4     {
 5         public int Compare(Student x, Student y)
 6         {
 7             return x.StudentName.CompareTo(y.StudentName);
 8         }
 9     }
10     class StuNameDesc : IComparer<Student>
11     {
12         public int Compare(Student x, Student y)
13         {
14             return y.StudentName.CompareTo(x.StudentName);
15         }
16     }
17     class AgeAsc : IComparer<Student>
18     {
19         public int Compare(Student x, Student y)
20         {
21             return x.Age.CompareTo(y.Age);
22         }
23     }
24     class AgeDesc : IComparer<Student>
25     {
26         public int Compare(Student x, Student y)
27         {
28             return y.Age.CompareTo(x.Age);
29         }
30     }
31     #endregion

接下来在实际调用当中,会根据你的对象类调用实现:

 1             //创建几个学员对象
 2             Student objStudent1 = new Student(1001, "小明");
 3             Student objStudent2 = new Student(1002, "小王");
 4             Student objStudent3 = new Student(1003, "小林");
 5             Student objStudent4 = new Student(1004, "小周");
 6             Student objStudent5 = new Student(1005, "小郭");
 7             List<Student> objStu = new List<Student>() { objStudent3 , objStudent5 , objStudent1 , objStudent4 , objStudent2 };
 8             Console.WriteLine("=====对象排序前=======");
 9             foreach (var item in objStu)
10             {
11                 Console.WriteLine(item.StudentId+"\t"+item.StudentName);
12             }
13 Console.WriteLine("======按姓名升序排序===========");
14             objStu.Sort(new StuNameAsc());  //传递接口实现类来实现排序
15             //排序输出结果
16             foreach (var item in objStu)
17             {
18                 Console.WriteLine(item.StudentId + "\t" + item.StudentName);
19             }
20 
21             Console.ReadLine();

 

posted @ 2017-07-21 09:46  sadseal  阅读(1930)  评论(0编辑  收藏  举报