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)

{

…..

}

转载于:https://www.cnblogs.com/king_astar/archive/2010/08/05/1793520.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值