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);
                }
            }
        }
    }
  • 相关阅读:
    C# Socket TcpClient 无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接。。
    C#编程使用Managed Wifi API连接无线SSID
    中国最精确的电子地图,可以找到你家哦
    利用mysql数据库中的TMD表修复“is marked as crashed and last (automatic?) repair failed”的错误 Database query error
    Google Directions API 中路线编码解析
    c语言 nmealib-0.5.3 学习 简单代码 ,供参考
    【转】IT管理人才必备的十大能力
    【转】10个让人受益的管理原理
    【转】耐心看
    【转】对于移动APP测试的一个小技巧
  • 原文地址:https://www.cnblogs.com/Jacklovely/p/7232766.html
Copyright © 2011-2022 走看看