List<T>的Sort方法巧用
- 问题来源
这两天做图标用到了OpenFlashChart,那么它是有一个dll文件的,可以很方便的在后台生成Json数据返回前台。
在使用的过程中我有这么一个需求,折线图上的点集合是一个List<LineDotValue>集合,LineDotValue对象中有Value属性表示值的大小,我现在想对集合用Value值排序,怎么办? - 一般方案
看到这个问题,大家一般都可以想到用List的Sort方法,那么使用的形式一般有以下几种:
a) 让LineDotValue类实现IComparable接口中的CompareTo()方法,在CompareTo方法中实现自己的比较规则。然后直接调用集合的Sort()方法
b) 不想破坏LineDotValue类,那么自定义一个比较器LineDotValueComparer,实现IComparer<LineDotValue>的Compare()方法,然后调用集合的Sort(LineDotValueComparer)
c) 自己写算法排序...... - 我的解决方法
很不幸以上方法我都不喜欢,因为我引用了现成的dll文件,不想去修改源文件,所以a方案不适用。这个排序只在这个地方使用一次,不想费周折再写一个比较器,b方法弃用。c就不用说了......
常用Jquery的人肯定熟悉这样的写法
1 $('#id').click(function(){
2 //代码
3 });
答案是肯定的,如果你使用的是vs2008以上版本环境,那么恭喜你,无论你是framework2.0还是3.5,一个lamda表达式搞定
List<LineDotValue> values = new List<LineDotValue>();
//填充集合
values.Sort((x,y)=>x.Value > y.Value ? -1 : 0);
values.Sort(delegate(LineDotValue x, LineDotValue y)
{
return x.Value > y.Value ? -1 : 0;
});