深入IComparable与IComparer的排序实例详解

 更新时间:2020年6月25日 11:40  点击:2199
如下所示:
复制代码 代码如下:

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace hgoApp
{
    class Comparer
    {
        static void Main()
        {
            Employee[] Employees = new Employee[5];

            Employees[0] = new Employee("张三", 2800);
            Employees[1] = new Employee("李四", 1800);
            Employees[2] = new Employee("王五", 5800);
            Employees[3] = new Employee("马六", 12800);
            Employees[4] = new Employee("钱七", 8800);
            Console.WriteLine("按照姓名排序");
            Array.Sort(Employees);
            foreach (Employee em in Employees)
            {
                Console.WriteLine(em);
            }
            Console.WriteLine("按照薪水排序");
            Array.Sort(Employees, Employee.SalaryCom);
            foreach (Employee em in Employees)
            {
                Console.WriteLine(em);
            }
        }
    }
    class Employee : IComparable
    {
        private string _Name;
        public string Name
        {
            get { return _Name; }
        }
        private int _Salary;
        public int Salary
        {
            get { return _Salary; }
        }
        public Employee(string Name, int Salary)
        {
            _Name = Name;
            _Salary = Salary;
        }
        //显示接口实现
        int IComparable.CompareTo(object obj)
        {
            if (!(obj is Employee))
            {
                throw new ArgumentException("不是Employee类");
            }
            return _Name.CompareTo(((Employee)obj)._Name);
        }
        //提供一个公用的强类型重载版本
        public int CompareTo(Employee Em)
        {
            return _Name.CompareTo(Em._Name);
        }
        //当第一次实例化Employee的时候,_SalaryCom为空,当使用SalaryCom时,就会创建一个SalaryCompare对象,第2次,3次的时候,就可以直接使用_SalaryCom了
        private static SalaryCompare _SalaryCom = null;
        public static IComparer SalaryCom
        {
            get
            {
                if (_SalaryCom == null)
                {
                    _SalaryCom = new SalaryCompare();
                }
                return _SalaryCom;
            }
        }
        //嵌套类(这个类是针对薪水进行排序的类)
        private class SalaryCompare:IComparer
        {
            //使用指定的IComparer对Array中的元素进行排序
            int IComparer.Compare(object obj1,object obj2)
            {
                if (!(obj1 is Employee) || !(obj2 is Employee))
                {
                    throw new ArgumentException("不是Employee类");
                }
                return ((Employee)obj1)._Salary.CompareTo(((Employee)obj2)._Salary);
            }
        }
        public override string ToString()
        {
            return _Name +"  "+ _Salary.ToString();
        }
    }
}
[!--infotagslink--]

相关文章

  • antdesign-vue结合sortablejs实现两个table相互拖拽排序功能

    这篇文章主要介绍了antdesign-vue结合sortablejs实现两个table相互拖拽排序功能,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-01-09
  • C# 参数按照ASCII码从小到大排序(字典序)

    这篇文章主要介绍了C# 参数按照ASCII码从小到大排序(字典序)的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • js实现列表按字母排序

    这篇文章主要为大家详细介绍了js实现列表按字母排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-08-11
  • C#实现排序的代码详解

    在本篇文章里小编给大家整理的是关于C#实现排序的代码以及相关知识点,需要的朋友们参考下。...2020-06-25
  • 图文详解Heap Sort堆排序算法及JavaScript的代码实现

    这篇文章以图文详解Heap Sort堆排序算法及JavaScript的代码实现,堆排序算法基于类二叉树的堆数据结构,需要的朋友可以参考下...2016-05-05
  • js实现数组冒泡排序、快速排序原理

    这篇文章主要为大家详细介绍了js实现数组冒泡排序、快速排序的原理,感兴趣的小伙伴们可以参考一下...2016-03-10
  • c# n个数排序实现代码

    c# n个数排序实现代...2020-06-25
  • JS实现的随机排序功能算法示例

    这篇文章主要介绍了JS实现的随机排序功能算法,结合具体实例形式分析了javascript常用的排序算法实现技巧,需要的朋友可以参考下...2017-06-15
  • 分享javascript实现的冒泡排序代码并优化

    本文给大家汇总介绍了几个个人收藏的JavaScript实现冒泡排序的代码,都是非常的不错,有需要的小伙伴可以参考下...2016-06-12
  • C#使用linq对数组进行筛选排序的方法

    这篇文章主要介绍了C#使用linq对数组进行筛选排序的方法,实例分析了C#实用linq扩展进行数组排序的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C#实现冒泡排序算法的代码示例

    冒泡排序即是对数组每次轮循出最大数或最小数放在队尾,这里我们来看一下C#实现冒泡排序算法的代码示例,需要的朋友可以参考下...2020-06-25
  • jQuery实现对无序列表的排序功能(附demo源码下载)

    这篇文章主要介绍了jQuery实现对无序列表的排序功能,涉及jQuery与javascript常见的文本操作函数与sort排序函数的相关使用方法,具有一定参考借鉴价值,需要的朋友可以参考下...2016-07-01
  • C++ 字符串去重排序实例代码

    这篇文章主要介绍了C++ 字符串去重排序实例代码的相关资料,需要的朋友可以参考下...2020-04-25
  • 利用JavaScript对中文(汉字)进行排序实例详解

    排序是我们在日常开发中经常遇到的一个功能,下面这篇文章主要给大家介绍了利用JavaScript对中文(汉字)进行排序的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来看看吧。...2017-06-24
  • JavaScript数值数组排序示例分享

    但是,我们在使用中就会发现问题,这里的数组排序方法并不是按照我们想像中的数字大小来排序的,而是按照字符串测试结果改变原先的数据。这并不是我们想要的。那么如何才可以得到我们想要的按照我们思维中的数字大小来排序...2014-05-31
  • C++ STL关联式容器自定义排序规则的2种方法

    这篇文章主要介绍了C++ STL关联式容器自定义排序规则的2种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-04
  • C语言开发之归并排序详解及实例

    这篇文章主要介绍了 C语言开发之归并排序详解及实例的相关资料,需要的朋友可以参考下...2020-04-25
  • VC++实现选择排序算法简单示例

    这篇文章主要介绍了VC++实现选择排序算法简单示例,代码简洁易懂,有助于读者对数据结构与算法的学习,需要的朋友可以参考下...2020-04-25
  • oracle实现按天,周,月,季度,年查询排序方法

    这篇文章主要介绍了oracle按天,周,月,季度,年查询排序功能,本文给出了sql语句,每种方法给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11
  • vue实现页面div盒子拖拽排序功能

    本文主要介绍了vue实现页面div盒子拖拽排序功能,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-10-22