zoukankan      html  css  js  c++  java
  • 复杂排序

    除了使用集合元素默认的比较器进行排序,还可以传递实现IComparer接口的类,按自定义的排序逻辑进行排序。

    下面用一个IT书籍,希望将书按价格从高向底排序

     public class Book
        {
        //定义书名属性
            private string _bookname;
            public string Bookname
            {
                get { return _bookname; }
                set { _bookname = value; }

            }
            //定义书籍分类属性
            private string _bookcategory;
            public string Bookcategory
            {
                get { return _bookcategory; }
                set { _bookcategory = value; }
            }
            //定义价格属性
            public double _price;
            public double Price
            {
                get { return _price; }
                set { _price = value; }
            }
            //定义书籍类的构造函数
            public Book( string bookname ,string bookcategory,double price)       
            {
                _bookname = bookname;
                _bookcategory = bookcategory;
                _price = price;
            }
            ///<summary>
            ///价格从高到死排序
            ///</summary>
            public class InstanceCompare : IComparer
            {
                public int Compare(object x, object y)
                {
                //使用书籍的价格进行比较
                    double i = ((Book)y).Price - ((Book)x).Price;
                    if (i > 0)
                    {
                        return 1;
                    }
                    else if (i<0)
                    {
                        return -1;
                    }
                    else
                    {
                        return 0;
                    }
                }
            }
        }
       ///按照书名从高到底排序

        public class BookNameCompare :IComparer
        {
            public int Compare(object x, object y)
            {
            //调用.net预定义的按指定忽略大小写比较器比较书名
                return new CaseInsensitiveComparer().Compare((((Book)y).Bookname), ((Book)x).Bookname);
            }
        }

       // #region 复杂排序
                    Book[] books = new Book[8] { new Book("C#书籍z", "C#", 45.5), new Book("C#书籍f", "C#", 55.8), new Book("Delohi书籍1", "Delohi", 78), new Book("C#书籍x", "C#", 55.9), new Book("ASP.NET", "ASP.NET", 66), new Book("Delohi书籍2", "Delohi", 79), new Book("C#书籍y", "C#", 60), new Book("C#书籍b", "C#",80) };
                    ArrayList al = new ArrayList(books);
                    Console.WriteLine("没有排序前的序列------------");
                    DisplayResult(al);
                    //对数组按价格进行排序调用InstanceCompare比较器
                    al.Sort(new 基础笔记学习.Book.InstanceCompare());
                    Console.WriteLine("排序以后的输出--------------");
                    DisplayResult(al);
                    Console.WriteLine("------------------------------------");
                    //对数组进行按书名进行排列,调用BookNameCompare
                    al.Sort(new 基础笔记学习.Book.InstanceCompare());
                    DisplayResult(al);
                    #endregion

    static void DisplayResult(ArrayList ls)
            {
                foreach (Book   item in ls)
                {
                    Console.WriteLine("书名:{0},价格:{1}",item.Bookname,item.Price);
                }
            }

  • 相关阅读:
    Linux Kernel Makefiles Kbuild en
    Android 源码结构分析
    Linux Charger IC 驱动移植总结
    Battery Charging Specification Revision 1.2 中文版本
    OpenCV 3.4.2 Windows系统下的环境搭建(附带opencv_contrib-3.4.2)
    OpenCV 经纬法将鱼眼图像展开
    shell 循环结构
    OpenCV之Mat类使用总结
    shell 条件结构之 if 语句使用总结
    OpenCV Error: Unspecified Error(The Function is not implemented)
  • 原文地址:https://www.cnblogs.com/lichen396116416/p/1921068.html
Copyright © 2011-2022 走看看