当前位置: 移动技术网 > IT编程>开发语言>c# > 深入IComparable与IComparer的排序实例详解

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

2019年07月18日  | 移动技术网IT编程  | 我要评论
如下所示:
复制代码 代码如下:

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();
        }
    }
}

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网