通過自定義比較器排序(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、輸出結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM