zoukankan      html  css  js  c++  java
  • C#学习笔记(20)——使用IComparer(自己写的)

    说明(2017-7-25 10:38:37):

    1. 参照了上一篇百度文库里的文章。

    2. 总结来看,Icomparer就是sort方法的一个参数,用来自定义一个排序规则。

    3. 使用方法是,定义一个排序类,如PersonComparer,继承Icomparer接口,实现里面的Icomparer方法,用的时候直接sort(new

    PersonComparer())就可以了。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace _03IComparer用法
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<Person> p = new List<Person>();
                p.Add(new Person("张三", 12));
                p.Add(new Person("李四", 23));
                p.Add(new Person("王五", 43));
                p.Add(new Person("赵六", 25));
                p.Add(new Person("钱七", 63));
                p.Add(new Person("孙八", 23));
                p.Add(new Person("孙九", 18));
                //排序前
                foreach (Person person in p)
                {
                    person.SayHello();
                }
                Console.WriteLine("________________________");
                //按姓名排序,注意sort排序会改变原值!
                p.Sort(new PersonComparer(PersonComparer.CompareType.Name));
                foreach (Person person in p)
                {
                    person.SayHello();
                }
                Console.WriteLine("________________________");
                //按年龄排序
                p.Sort(new PersonComparer(PersonComparer.CompareType.Age));
                foreach (Person person in p)
                {
                    person.SayHello();
                }
                
                Console.ReadKey();
            }
    
        }
        //定义Person类
        class Person
        {
            public Person(string name, int age)
            {
                this.Name = name;
                this.Age = age;
            }
            public string Name { get; set; }
            public int Age { get; set; }
            //这个地方很多文章用了“public override string ToString()”,重写了ToString方法,返回上面两个属性,我觉得没必要,搞得让人费解,还不如重新起个名,比如SayHello
            public void SayHello()
            {
                Console.WriteLine("我叫{0},今年{1}岁了!", this.Name, this.Age);
            }
        }
    
        //定义PersonComparer类,其实就是声明一个自定义的排序规则。此处的规则就是,按照名字排序,或者按照成绩排序。
        //sort方法,如果无参,使用默认比较器。另外可以使用IComparison,IComparer参数。
        class PersonComparer : IComparer<Person>
        {
            //定义枚举,方便传参,根据名字还是年龄排序。
            public enum CompareType
            {
                Name,
                Age
            }
            private CompareType type;
            public PersonComparer(CompareType type)
            {
                this.type = type;
            }
            //实现IComparer接口,里面就一个Compare函数,返回int类型
            //返回结果:一个带符号整数,它指示 x 与 y 的相对值。小于零,x小于y。零,x等于y。大于零,x大于y。
            public int Compare(Person x, Person y)
            {
                if (this.type == CompareType.Name)
                {
                    return x.Name.CompareTo(y.Name);
                }
                else
                {
                    return x.Age.CompareTo(y.Age);
                }
            }
        }
    }
  • 相关阅读:
    nginx简介(轻量级开源高并发web服务器:大陆使用者百度、京东、新浪、网易、腾讯、淘宝等)(并发量5w)(一般网站apache够用了,而且稳定)
    js中json数据简单处理(JSON.parse()和js中嵌套html)
    js中json法创建对象(json里面的:相当于js里面的=)
    SimpleDateFormat使用特定的解释
    eclipse+webservice开发实例
    android在Canvas使用drawBitmap画一幅画
    SoC嵌入式软件架构设计II:没有MMU的CPU虚拟内存管理的设计和实现方法
    SRM 590 DIV1
    菜鸟教程工具(三)——Maven自己主动部署Tomcat
    activity-alias使用
  • 原文地址:https://www.cnblogs.com/Jacklovely/p/7232766.html
Copyright © 2011-2022 走看看