现在的位置: 首页 > 综合 > 正文

List的Sort方法巧用

2012年05月01日 ⁄ 综合 ⁄ 共 873字 ⁄ 字号 评论关闭
  1. 问题来源
    这两天做图标用到了OpenFlashChart,那么它是有一个dll文件的,可以很方便的在后台生成Json数据返回前台。
    在使用的过程中我有这么一个需求,折线图上的点集合是一个List<LineDotValue>集合,LineDotValue对象中有Value属性表示值的大小,我现在想对集合用Value值排序,怎么办?
  2. 一般方案
    看到这个问题,大家一般都可以想到用List的Sort方法,那么使用的形式一般有以下几种:
    a) 让LineDotValue类实现IComparable接口中的CompareTo()方法,在CompareTo方法中实现自己的比较规则。然后直接调用集合的Sort()方法
    b) 不想破坏LineDotValue类,那么自定义一个比较器LineDotValueComparer,实现IComparer<LineDotValue>Compare()方法,然后调用集合的Sort(LineDotValueComparer)
    c) 自己写算法排序......
  3. 我的解决方法
    很不幸以上方法我都不喜欢,因为我引用了现成的dll文件,不想去修改源文件,所以a方案不适用。这个排序只在这个地方使用一次,不想费周折再写一个比较器,b方法弃用。c就不用说了......
    常用Jquery的人肯定熟悉这样的写法
    1 $('#id').click(function(){
    2 //代码
    3 });

    那么C#中可不可以有类似的实现呢?
    答案是肯定的,如果你使用的是vs2008以上版本环境,那么恭喜你,无论你是framework2.0还是3.5,一个lamda表达式搞定

    List<LineDotValue> values = new List<LineDotValue>();
    //填充集合
    values.Sort((x,y)=>x.Value > y.Value ? -1 : 0);

    如果是vs2005以下,那么可以使用委托

    values.Sort(delegate(LineDotValue x, LineDotValue y)
    {
    return x.Value > y.Value ? -1 : 0;
    });

    Ok,搞定

抱歉!评论已关闭.