通过自定义比较器排序(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.Addnew Product) { Name = "pro1", Price = 2.4, Num = 6 });
products.Addnew Product) { Name = "pro2", Price = 4.6, Num = 3 });
products.Addnew Product) { Name = "pro3", Price = 1.8, Num = 5 });
products.Addnew Product) { Name = "pro4", Price = 25.2, Num = 1 });

3、创建比较器

1) 产品价格比较器:

    /// <summary>
    /// 产品价格比较器
    /// </summary>
    public class ProductPriceComparer : IComparer<Product>
    {
        public int CompareProduct 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 CompareProduct x,Product y)
        {
            if x == null && y == null) return 0;
            if x == null) return -1;
            if y == null) return 1;
            return x.Name.CompareToy.Name);
        }
    }

3) 产品编号比较器:

    /// <summary>
    /// 产品编号比较器
    /// </summary>
    public class ProductNumComparer : IComparer<Product>
    {
        public int CompareProduct 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 PrintResultList<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.Sortnew ProductNameComparer));
    Console.WriteLine"根据名称排序:");
    PrintResultproducts);

    products.Sortnew ProductNumComparer));
    Console.WriteLine"根据编号排序:");
    PrintResultproducts);

    products.Sortnew ProductPriceComparer));
    Console.WriteLine"根据价格排序:");
    PrintResultproducts);

6、输出结果

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注