zoukankan      html  css  js  c++  java
  • .NET C# 保持List<T>有序:自带排序功能的List<T>

    1.工具类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace Infrastructure
    {
        /// <summary>
        /// 自带排序功能的List
        /// T为简单类型时,系统已代为实现ICompareable<T>接口,
        /// T为自定义复杂类型时,需要手动实现ICompareable<T>接口
        /// </summary>
        /// <typeparam name="T">泛型类型</typeparam>
        public class SortedList<T>:List<T>
        {
            /// <summary>
            /// 自带排序功能的添加方法
            /// </summary>
            /// <param name="item">数据项</param>
            public new void Add(T item)//new 显式隐藏从基类继承过来的方法,进行重写方法时用到
            {
                int position = this.BinarySearch(item);
                if (position < 0)
                {
                    position = ~position;//按位取反,获取项应插入集合的位置
                }

                this.Insert(position,item);
            }

            /// <summary>
            /// 自带排序功能的修改方法
            /// </summary>
            /// <param name="item">新数据项</param>
            /// <param name="index">被修改数据项的位置下标</param>
            public void ModifySorted(T item, int index)
            {
                this.RemoveAt(index);

                int position = this.BinarySearch(item);
                if (position < 0)
                {
                    position = ~position; //按位取反,获取项应插入集合的位置
                }

                this.Insert(position,item);
            }

            //List<T>的删除方法不会干扰剩余数据项的排序顺序,所以不需要重写
        }
    }
    2.功能测试

    //简单类型测试
                SortedList<int> intSortedList = new SortedList<int>();

    //添加元素
                intSortedList.Add(200);
                intSortedList.Add(20);

                intSortedList.ForEach(Console.WriteLine);

    //修改元素

    intSortedList.ModifySorted(0, 1);
                intSortedList.ModifySorted(1, 0);

    intSortedList.ForEach(Console.WriteLine);

    //复杂类型测试

    public class Student: IComparable<Student>//自定义复杂类型,如果想要使用List<T>的比较器,必须要继承IComparable<T>接口
        {
            /// <summary>
            /// 班级编号
            /// </summary>
            public int ClassNo { get; set; }
            /// <summary>
            /// 学号
            /// </summary>
            public int StudentNo { get; set; }
            /// <summary>
            /// 姓名
            /// </summary>
            public string StudentName { get; set; }
            /// <summary>
            /// 年龄
            /// </summary>
            public int Age { get; set; }

            /// <summary>
            /// 比较方法规则
            /// </summary>
            public int CompareTo(Student obj)
            {
                return this.StudentNo.CompareTo(obj.StudentNo);
            }
        }

    //添加

    SortedList<Student> stuSortedList = new SortedList<Student>();
                for (int i = 0; i < 10; i++)
                {
                    var stu = new Student();
                    stu.ClassNo = i;
                    stu.StudentNo = i;
                    stu.StudentName = "三毛" + i;
                    stu.Age = i;
                    
                    stuSortedList.Add(stu);
                }

                stuSortedList.ForEach(x => Console.WriteLine("ClassNo={0},StudentNo={1},StudentName={2},Age={3}",x.ClassNo,x.StudentNo,x.StudentName,x.Age));

    //修改

    for (int i = 0; i < 5; i++)
                {
                    var stu = new Student();
                    stu.ClassNo = 20 + i;
                    stu.StudentNo = 20 + i;
                    stu.StudentName = "胡三" + (20+ i);
                    stu.Age = 20 + i;

                    stuSortedList.ModifySorted(stu,i+1);
                }

                stuSortedList.ForEach(x => Console.WriteLine("ClassNo={0},StudentNo={1},StudentName={2},Age={3}", x.ClassNo,x.StudentNo, x.StudentName, x.Age));

  • 相关阅读:
    移动端 h5开发相关内容总结——CSS篇
    水滴导航特效
    腾讯课堂之前端开发html5css3javascriptjQueryJS年薪20万
    阿里前端笔试总结
    Web 开发的未来:React、Falcor 和 ES6
    Yii2按需加载图片怎么做?
    Yii2 灵活加载js、css
    Ubuntu上搭建SVN
    yii pageTitle与Yii::app()->name的区别
    Mysql--Database Exception (#42) 数据库错误
  • 原文地址:https://www.cnblogs.com/jeff151013/p/11739739.html
Copyright © 2011-2022 走看看