• List Sort 使用的注意几点


    以前有个哥们好像写过类似的文章。当时没有注意,今天才发现有时候Sort时候真会带来麻烦。说说我遇到的麻烦:

    我需要监控一个机器的状态,得到的数据类似:

    1-PRD 8:30:00

    2-STD 8:30:00

    3-PRD 9:30:00

    4-STD 9:31:00

    我把数据都放在一个List<StateItem>容器里面,同时StateItem实现了IComparable接口,是datetime来排序。其实数据过来时候也是按照时间来排序,但是我仍然做了Sort操作。

    结果问题出现了,我出来的统计报表跟以前跑的报表由差距。

    PRD time : (2)-(1)+(4)-(3) = 1 Min

    STD time : (3)-(2) = 1 hour

    结果排序后,数据顺序成了(1)和(2)调换了,

    1-STD 8:30:00

    2-PRD 8:30:00

    3-PRD 9:30:00

    4-STD 9:31:00

    PRD time : (4)-(2) = 1 hour +1min

    STD time : 0

    结果大相径庭。 :(

    总结:排序的时候要考虑到相同rank的情况。

     

    另外一种情况是由于比较数接近造成的问题

    int IComparable.CompareTo( stateItem item)
            {

                return Convert.Int32((this.datetime – item.datetime).TotalMinutes);
             }

    好像没有错。但请考虑当totalMinutes<1为小数的情况,则无法判断两个对象的次序。

    OK,转成

    return this.datetime.ticks.CompareTo(item.datetime.ticks);

    enn….

    关于排序的接口有2个:

    1 IComparable

    子项完成。

    2. IComparer

    容器完成

    除此,Sort支持直接调用方法

    ListExample.Sort(Method1);

    public int Method1(item X, item Y)

    {

    …..

    }

  • 相关阅读:
    [luogu1540]机器翻译 (模拟/vector练习)
    牛客网数据库SQL实战解析(1-10题)
    Spark本地配置
    zookeeper基本配置以及一些坑
    更改默认Xcode
    速记OSI七层协议模型
    实用的git log用法
    Mac上如果看不到.git目录的解决方法
    Mac上Safari不能关键字搜索
    今天开始写技术博客,聊技术,聊梦想,共同成长!
  • 原文地址:https://www.cnblogs.com/king_astar/p/1793520.html
Copyright © 2020-2023  润新知