zoukankan      html  css  js  c++  java
  • 通过自定义比较器排序(C#版)

    一、方法概述

    自定义比较器需要实现接口IComparer<T>

    二、示例过程

    1、新建一个Product产品类

        /// <summary>
        /// 产品类
        /// </summary>
        public class Product
        {
            /// <summary>
            /// 名称
            /// </summary>
            public string Name { get; set; }
            /// <summary>
            /// 价格
            /// </summary>
            public Double Price { get; set; }
            /// <summary>
            /// 编号
            /// </summary>
            public int Num { get; set; }
        }

    2、新建一个Product对象并赋值

    List<Product> products = new List<Product>();
    products.Add(new Product() { Name = "pro1", Price = 2.4, Num = 6 });
    products.Add(new Product() { Name = "pro2", Price = 4.6, Num = 3 });
    products.Add(new Product() { Name = "pro3", Price = 1.8, Num = 5 });
    products.Add(new Product() { Name = "pro4", Price = 25.2, Num = 1 });

    3、创建比较器

    (1) 产品价格比较器:

        /// <summary>
        /// 产品价格比较器
        /// </summary>
        public class ProductPriceComparer : IComparer<Product>
        {
            public int Compare(Product x,Product y)
            {
                if (x == null && y == null) return 0;
                if (x == null) return -1;
                if (y == null) return 1;
                var diff = x.Price - y.Price;
                if (diff > 0) return 1;
                if (diff < 0) return -1;
                return 0;
            }
        }

    (2) 产品名称比较器:

        /// <summary>
        /// 产品名称比较器
        /// </summary>
        public class ProductNameComparer : IComparer<Product>
        {
            public int Compare(Product x,Product y)
            {
                if (x == null && y == null) return 0;
                if (x == null) return -1;
                if (y == null) return 1;
                return x.Name.CompareTo(y.Name);
            }
        }

    (3) 产品编号比较器:

        /// <summary>
        /// 产品编号比较器
        /// </summary>
        public class ProductNumComparer : IComparer<Product>
        {
            public int Compare(Product x, Product y)
            {
                if (x == null && y == null) return 0;
                if (x == null) return -1;
                if (y == null) return 1;
                return x.Num-y.Num;
            }
        }

    4、打印输出结果的方法

            /// <summary>
            /// 打印结果
            /// </summary>
            /// <param name="products"></param>
            public static void PrintResult(List<Product> products)
            {
                Console.WriteLine("开始打印");
                foreach (var product in products)
                {
                    Console.WriteLine($"name:{product.Name},price:{product.Price},num:{product.Num}");
                }
                Console.WriteLine("打印完毕");
                Console.WriteLine("----------分割线----------------------");
            }

    5、通过比较器排序并打印出结果

        products.Sort(new ProductNameComparer());
        Console.WriteLine("根据名称排序:");
        PrintResult(products);
    
        products.Sort(new ProductNumComparer());
        Console.WriteLine("根据编号排序:");
        PrintResult(products);
    
        products.Sort(new ProductPriceComparer());
        Console.WriteLine("根据价格排序:");
        PrintResult(products);

    6、输出结果

  • 相关阅读:
    Solo 博客系统 1.7.0 发布
    <Android 基础(二十九)> Fragment (2) ~ DialogFragment
    2016最新Java学习计划
    <Android 基础(二十八)> Fragment (1)
    2016最新前端学习计划
    Android 学习路线图
    C/C++学习路线图
    小学数学题,你会吗?
    劣质代码评析——《写给大家看的C语言书(第2版)》附录B之21点程序(八)
    劣质代码评析——《写给大家看的C语言书(第2版)》》附录B之21点程序(七)
  • 原文地址:https://www.cnblogs.com/dayang12525/p/8074280.html
Copyright © 2011-2022 走看看