• 梳理C#排序


    本例通过返回一个无序的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环境下运行通过。实现的话我觉得大家都差不多,个人认为第二种方式和第三种方式可读性更好点。

  • 相关阅读:
    基贝叶斯后验概率的拼写检查器实现 python
    Hadoop The Definitive Guide 2nd Edition 笔记
    DGV删除当前选中行
    DGV设置单元不可编辑
    DGV获取当前选中单元格
    HDU2112_HDU Today_有地名的最短路_map+SPFA
    HDU1026_优先队列+广搜+打印路径
    HDU2757_Ocean Currents_优先队列+广搜_入门题_十四周模拟赛
    自己写的SPFA模板(可打印路径)
    HDU2782_暴力深搜_第十四周模拟赛
  • 原文地址:https://www.cnblogs.com/microyum/p/9738953.html
Copyright © 2020-2023  润新知