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();
            }
        }
    }
  • 相关阅读:
    Jquery EasyUI选项卡-Tabs的使用方法
    JS—正则表达式
    Visiual Studio2012 CLR20r3问题
    JSON.stringify 语法实例讲解
    JS中对数组的操作方法
    easyUI之datagrid
    (转帖)关于easyui中的datagrid在加载数据时候报错:无法获取属性"Length"的值,对象为null或未定义
    [转载]JQ 选择器大全[<font color=red>强记忆</font>]
    thinkphp函数学习(1)——header, get_magic_quotes_gpc, array_map, stripslashes, stripslashes_deep
    thinkphp函数学习(0)——开篇
  • 原文地址:https://www.cnblogs.com/Jacklovely/p/7230572.html
Copyright © 2011-2022 走看看