zoukankan      html  css  js  c++  java
  • 对List.Sort的简单研究

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

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

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

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

    先设定个类MyClass

    Code

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

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

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

    MyClassComparer

    测试一下:

    Program

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

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

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

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

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

    下面是50个对象时的截图

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

  • 相关阅读:
    vbscript错误代码及对应解释大全(希望还没过时)
    对象存储服务MinIO安装部署分布式及Spring Boot项目实现文件上传下载
    一道算法题,求更好的解法
    浅谈SQLite——实现与应用
    Linux网络协议栈(二)——套接字缓存(socket buffer)
    服务器开发入门——理解异步I/O
    理解MySQL——复制(Replication)
    线性时间排序算法
    Linux网络协议栈(一)——Socket入门(2)
    理解MySQL——索引与优化
  • 原文地址:https://www.cnblogs.com/inday/p/1340262.html
Copyright © 2011-2022 走看看