码迷,mamicode.com
首页 > 编程语言 > 详细

梳理C#排序

时间:2018-10-03 22:11:11      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:std   实体   public   四种   都差不多   重新定义   book   size   dso   

本例通过返回一个无序的Book类型的List,实现了按照书本名称排序并输出的四种实现方式。

书本实体类列表的实现

public class Books{
    public string Name{get; set;}
    
    public decimal Price{get; set;}

    public Books(string Name, decimal Price){
        this.Name = Name;
        this.Price = Price;
    }

    public static List<Books> GetBooksList(){

        return new List<Books>{
            new Books(Name: "Think In Java", Price: 108.00m),
            new Books(Name: "Python Core", Price: 89.00m),
            new Books(Name: "C# in Depth", Price: 99.00m),
            new Books(Name: "Java 8 In Action", Price: 79.00m)
        };
    }

    public override string ToString(){
        return string.Format("{0}, {1}", Name, Price);
    }
}

 

传统的实现方式

传统的开发中,一般提供一个IComparer的实现来定义排序顺序

 

class BooksNameCompare : IComparer<Books> {

    public int Compare(Books x, Books y){

        return x.Name.CompareTo(y.Name);
    }
}

 

// 实现方法
List<Books> listOldSort = Books.GetBooksList();
listOldSort.Sort(new BooksNameCompare());
foreach(Books p in listOldSort) {
    Console.WriteLine(p.ToString());
}

 

这种实现方法,我觉得最大的问题是太繁琐。例如今后如果要实现根据价格排序,还需要重新定义一种排序。

 

通过代理的方式实现排序

List<Books> listDelegateSort = Books.GetBooksList();
listDelegateSort.Sort(delegate (Books x, Books y) {
    return x.Name.CompareTo(y.Name);
});
foreach(Books p in listDelegateSort) {
    Console.WriteLine(p.ToString());
}

 

通过Lambda表达式来实现排序

List<Books> listLambdaSort = Books.GetBooksList();
listLambdaSort.Sort((x, y) => x.Name.CompareTo(y.Name));
foreach(Books p in listLambdaSort) {
    Console.WriteLine(p.ToString());
}

 

使用LINQ实现排序输出

List<Books> listExpandSort = Books.GetBooksList();
foreach(Books p in listExpandSort.OrderBy(p => p.Name)) {
    Console.WriteLine(p.ToString());
}

OrderBy是一个扩展方法,需要在首部using System.Linq;才能实现这种排序方式。

 

结束


以上的代码在.net core 2.1环境下运行通过。实现的话我觉得大家都差不多,个人认为第二种方式和第三种方式可读性更好点。

 

梳理C#排序

标签:std   实体   public   四种   都差不多   重新定义   book   size   dso   

原文地址:https://www.cnblogs.com/microyum/p/9738953.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!