List<T>的Sort方法巧用

本文介绍如何在C#环境中利用Lambda表达式对List<LineDotValue>集合按照Value属性进行排序,包括不同版本的Visual Studio环境下的实现方式,并对比传统方法的优劣。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  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,搞定

转载于:https://www.cnblogs.com/lovejjhao/archive/2011/12/08/2280408.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值