最近一直忙着修改项目中的bug,特别是一些绑定的列表排序,因为是中途加入的,所以我一般不改变别人的存储过程或者类方法,只在需要的时候帮其排序一下,不过非常郁闷。。。。。。

为什么呢???存储过程用得是传入Where后的条件,然后拼接一个sql语句- -

一开始我以为只要在拼接后面加入order by就可以了,谁知道。。。order by的条件也是传入的 再次晕!!!

好吧,那我在绑定的时候弄排序吧。。。先前一直用DataView的Sort,比较方便,只要指定排序的列名就ok了,谁知道。。。他绑定的是List<T>。。。。。怎么办。。。现在没有用过,看了下Sort方法,参数是IComparer<T> comparer,郁闷,先前一直没接触过,所以在家慢慢研究了一下,发觉很神奇,这里简单介绍下,希望大家也能帮我解答一下。

先设定个类MyClass

Code
public class MyClass
    {
        private int userID;

        public int UserID
        {
            get { return userID; }
            set { userID = value; }
        }
        private string userName;

        public string UserName
        {
            get { return userName; }
            set { userName = value; }
        }
        private DateTime addTime;

        public DateTime AddTime
        {
            get { return addTime; }
            set { addTime = value; }
        }

        public MyClass(int userID, string userName, DateTime addTime)
        {
            this.userID = userID;
            this.userName = userName;

            this.addTime = addTime;
        }


    }

好,我现在要按照时间来倒序

因为第一次用IComparer 接口,所以做的简单点

写一个类,继承IComparer接口,实现Compare方法

MyClassComparer
public class MyClassComparer : IComparer<MyClass>
    {
      

        IComparer 成员#region IComparer<MyClass> 成员

        //比较两个对象并返回一个值,指示一个对象是小于、等于还是大于另一个对象。
        public int Compare(MyClass x, MyClass y)
        {
            //因为是倒序,所以如果x的时间大于y的时间,返回负数
            if (x.AddTime > y.AddTime)
            {
                return -1;
            }
            else if (x.AddTime < y.AddTime)
            {
                return 1;
            }
            else
            {
                return 0;
            }
            
        }

        #endregion
    }

测试一下:

Program
class Program
    {
        static void Main(string[] args)
        {
            

            List<MyClass> userList = new List<MyClass>();

            for (int i=0; i < 50; i++)
            {
                userList.Add(new MyClass(i, "James" + i.ToString(), DateTime.Now.AddHours(i)));
            }
            
            DateTime nowTime, endTime;

            nowTime = DateTime.Now;
            foreach (MyClass c in userList)
            {
                Console.WriteLine(c.UserID + ":" + c.UserName + " at " + c.AddTime);
            }
            System.Data.DataSet ds = new System.Data.DataSet();
            
            endTime = DateTime.Now;

            Console.WriteLine("未排序所用时间" + (endTime.Ticks - nowTime.Ticks));

            nowTime = DateTime.Now;

            userList.Sort(new MyClassComparer());
            foreach (MyClass c in userList)
            {
                Console.WriteLine(c.UserID + ":" + c.UserName + " at " + c.AddTime);
               
            }

            endTime = DateTime.Now;

            Console.WriteLine("排序所用时间" + (endTime.Ticks - nowTime.Ticks));

         
            Console.ReadLine();
        }
    }

测试成功,不过一开始我在MyClasComparer.Comparer方法里没有设定等于,所以排序的时候会提示错误,而且排序的时候也不正确,看了IComparer接口对于Comparer的说明(MSDN):比较两个对象并返回一个值,指示一个对象是小于、等于还是大于另一个对象。 不太明白它是如何做到排序的,只是返回个int值就可以了。。。。

排序的时候,使用userList.Sort(new MyClassComparer().Compare);也是一样的效果,我知道ICompare使用了委托,所以在这里不需要我们来传参数了,我在Compare方法中设了断点,想看看是不是每次都是循环排序,跟踪下来是循环进行排序的,然后我想看看性能,奇怪的事情出现了。。。。

10个对象的时候,排序时间<未排序时间

100个对象的时候,排序时间>未排序时间

这个有点不太明白了,希望大家能帮我解答一下

下面是50个对象时的截图

很奇怪,排序所用时间比未排序还要短。。。为什么啊

转载于:https://www.cnblogs.com/inday/archive/2008/11/24/1340262.html

对List.Sort的简单研究相关推荐

  1. 简单研究用于监控数通设备的Zabbix模板:Template Module Interfaces SNMP与Template Module EtherLike-MIB SNMP

    本人的工作环境中已经有一套Zabbix平台用于监控1000台数量以上的交换机,该运维平台主要有如下作用: 查找某个区域的某台设备IP地址以方便管理员远程登录.查看/修改设备配置: 通过SNMP检测设备 ...

  2. [转载]3721驻留机制简单研究

    [转载]3721的驻留机制简单研究 Quaful@水木清华 简单研究了一下3721的机制,写在这里,作为心得笔记吧.大部分收获都来自 Softice + 反汇编,不一定适用于某些版本. 1. CnsM ...

  3. 泰山OFFICE技术讲座:竖排时中文标点的简单研究

    中文标点有两类,横排和竖排.那么,在竖排时,会产生什么差异呢?是否会因为竖排标点,产生布局的差异?于是进行了简单研究: 横排时,竖排标点,作为普通字符对待,没有特殊处理. 竖排时,竖排标点还是作为普通 ...

  4. OpenGL的简单研究-开端

    一直想要学习的但是没有学习的东西,大学一直在等待这个时间,终于可以闲下来研究一下这个部分的内容了. 计算机图形学,让计算机处理各种图像的东西,里面也存在很多算法和数学知识,很值得研究的一个领域,之前一 ...

  5. linux sort命令 性能,Linux sort 命令简单使用

    求助 -g与-n命令的差别还有待研究,如有知道的小伙伴不吝赐教. 常用命令 按ASCII码从小到大排序输出 sort test.txt 按ASCII码从大到小排序输出 sort -r test.txt ...

  6. 视频类网站的简单研究

    今年做视频的网站越来多了,特别是一些新起的播客网,打乱了传统视频网站的模式,播客网的出现,让网民有更多免费视频观看的选择,也为视频搜索这业务打下了基础.我现在就说说自己所接触过的一些播客网,免费视频网 ...

  7. 对Windows10虚拟桌面的简单研究

     汗啊,逆向Windows可不是容易的事,对于我来说就更难了.. 所以,我就用一些工具和丰富的Windows软件开发经验来简单滴研究一下Windows10沸沸扬扬的"虚拟桌面" ...

  8. Dolphin social network——海豚社会网络数据集的简单研究

    1.海豚社会网络数据摘要: Lusseau等在新西兰对62只宽吻海豚的生活习性进行了长时间的观察,他们研究发现这些海豚的交往呈现出特定的模式,并构造了包含有62个结点的社会网络.如果某两只海豚经常一起 ...

  9. LeetCode一求素数算法优化的简单研究

    前言 1.求素数对于大多数人都比较简单,谁不知道啊.一个数n只存在1与自身能整除的数就为素数,并且编写代码也相对容易,很快就能写出. 2. 但是如果我现在要求优化求素数的算法呢?你能做到几步优化?从时 ...

最新文章

  1. springBean生命周期----来自spring实战总结
  2. 转:SqlPlus Set常用设置
  3. SPV、SPV节点和SPV钱包
  4. 一文了解结构体字节对齐
  5. 网页交互动画终极指南
  6. 鸿蒙系统海外名称,新商标表明华为鸿蒙系统在海外或叫做“Harmony OS”
  7. 程序员能靠技术渡过中年危机吗?
  8. oracle数据库考试答题,Oracle数据库试题
  9. Mysql 计划任务
  10. 批量创建文本文档、word、excel、ppt-批处理(二)
  11. excel 如何删除有颜色的行
  12. ice的意思_ice是什么意思_ice的翻译_音标_读音_用法_例句_爱词霸在线词典
  13. 【Python】使用Zoho/Hotmail给单人/多人发送Email邮件,以及发发送附件
  14. JIRA-使用教程_界面_创建、方案配置
  15. 线性规划和对偶规划学习总结
  16. RocketMQ分布式事务原理介绍
  17. 内网代理穿透1:nc代理穿透
  18. 使用eNSP搭建一个简单的网络
  19. 非递归遍历二叉树实现
  20. 实例化Servlet类ServletTest异常的处理方式

热门文章

  1. java get请求 数组,浅谈vue中get请求解决传输数据是数组格式的问题
  2. android开不了机怎么办手机号码,手机开不了机怎么办 原因分析及其解决方法
  3. dup java_java web----TCP/DUP 通信
  4. 系统地址和服务器地址不一致,在打开远程通服务配置程序时检测系统配置时提示配置失败,映射的ip地址与服务器不一致。...
  5. Python getattr
  6. opencv-api warpPerspective
  7. C++语言类和对象介绍和示例
  8. mysql中怎么表示100美元_MySQL 事物,美国服务器
  9. Tomcat学习总结(17)—— Tomcat生产环境中域名访问和连接MySQL
  10. CISCO 端口出现err-disabled 现象解决案例