zoukankan      html  css  js  c++  java
  • C#学习笔记(19)——使用IComparer(百度文库)

    说明(2017-7-24 19:15:15):

    1. 百度文库里的一篇文章,觉得讲的比较好。原文地址:https://wenku.baidu.com/view/b53cd250ad02de80d4d84073.html

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    namespace _04IComparer示例
    {
        //class Program
        //{
        //    static void Main(string[] args)
        //    {
        //    }
        //}
        //c#如何使用IComparer子类的Sort排序方法
        //泛型的排序有3种方法,分别是:
        //1、List<T>.Sort(),只能在集合元素实现了IComparable泛型接口时使用
        //2、List<T>.Sort(Comparison<T>),Comparison<T>是一个方法委托,它带有 2个参数T,返回int类型,可以灵活指定如何排序,但是需要编码时手动指定如何排序;
        //3、List<T>.Sort(IComparer<T>),使用实现了IComparer<T>接口的类给集合排序,可以灵活指定如何排序,但是需预先定义好类的排序方法
        //这里介绍第三种方法:
        //首先定义一个类,用作集合的元素
    
        /// <summary>
        /// 学生类
        /// </summary>
        public class Student
        {
            private string name;
            // 姓名
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
            private int age;
            // 年龄
            public int Age
            {
                get { return age; }
                set { age = value; }
            }
            private string grade;
            // 年级
            public string Grade
            {
                get { return grade; }
                set { grade = value; }
            }
            //构造函数
            public Student(string name, int age, string grade)
            {
                this.name = name;
                this.age = age;
                this.grade = grade;
            }
            public override string ToString()
            {
                return this.name + "," + this.age.ToString() + "," + this.grade;
            }
        }
        //接着定义一个用于比较的类,实现IComparer<T>泛型接口:
        public class StudentComparer : IComparer<Student>
        {
            public enum CompareType
            {
                Name,
                Age,
                Grade
            }
            private CompareType type;
            // 构造函数,根据type的值,判断按哪个字段排序
            public StudentComparer(CompareType type)
            {
                this.type = type;
            }
            #region IComparer<Student> 成员
            public int Compare(Student x, Student y)
            {
                switch (this.type)
                {
                    case CompareType.Name:
                        return x.Name.CompareTo(y.Name);
                    case CompareType.Age:
                        return x.Age.CompareTo(y.Age);
                    default://case CompareType.Grade:
                        return x.Grade.CompareTo(y.Grade);
                }
            }
            #endregion
        }
        //下面就开始排序了:
        public class test
        {
            public static void Main()
            {
                List<Student> arr = new List<Student>();
                arr.Add(new Student("张三", 7, "一年级"));
                arr.Add(new Student("李四", 11, "二年级"));
                arr.Add(new Student("王五", 21, "一年级"));
                arr.Add(new Student("陈六", 8, "三年级"));
                arr.Add(new Student("刘七", 15, "二年级"));
                // 调用Sort方法,实现按年龄排序
                arr.Sort(new StudentComparer(StudentComparer.CompareType.Age));
                // 循环显示集合里的元素
                foreach (Student item in arr)
                    Console.WriteLine(item.ToString());
                Console.WriteLine("---------------------");
                // 调用Sort方法,实现按姓名排序
                arr.Sort(new StudentComparer(StudentComparer.CompareType.Name));
                // 循环显示集合里的元素
                foreach (Student item in arr)
                    Console.WriteLine(item.ToString());
                Console.ReadKey();
            }
        }
    }
  • 相关阅读:
    MySQL 列子查询及 IN、ANY、SOME 和 ALL 操作符的使用
    MySQL 标量子查询
    MySQL 子查询(subquery)语法与用法实例
    如何上传本地音乐获取MP3外链(欢迎分享和转载)
    RabbitMQ与Kafka的区别及其简单原理实现
    MySQL中varchar和char的区别
    MySQL降低insert, update, delete的优先级来优化性能
    Eclipse代码自动提示
    Java生成XML文件
    Java读取XML文件
  • 原文地址:https://www.cnblogs.com/Jacklovely/p/7230572.html
Copyright © 2011-2022 走看看