C# List.Sort()自定义比较方法排序


要用下面的routeName进行排序


public class BusRoute
{
	private string routeName;
        private int stationCount;
}


自定义比较方法

public static int Compare(BusRoute r1, BusRoute r2)
{
        return r1.RouteName.CompareTo(r2.RouteName);
}


用自定义比较方法排序

xxx.routeList.Sort(Compare);



-------------------------------------------分割线-------------------------------------------


引用:

经常看到有人因为使用.net中的集合类处理海量数据时性能不够理想,就武断的得出.net不行,c#也不行这样的结论。对于.net framework这样的类库来说,除了性能以外,通用性和安全性同样重要,而为了后者,有时就不得不牺牲性能。如果你的程序核心就是处理大量数据集合,并且对.net内置类库性能不满意,那么这时候就应该考虑为特定类型实现一个优化的版本了。 

      事情的由来是我需要对若干个(<10)集合进行排序,每个集合中的元素不会超过2k,老实说,所要处理的数据并不多,但我希望在1ms之内完成所有操作,这就成了挑战。也许有人觉得1ms的要求有些苛刻,但对我的应用来说,1ms已经很些奢侈了. 所要处理的数据非常简单,大部分都是一些数据集对象,每个对象都有一个uint类型的id,并以此为key进行排序:

public class KeyValuePair
{
    public uint id;
    public string s = string.Empty;
    public float d;
    public double c;
}

集合大小是不固定的,List自然就是最合适的容器,并且有现成的方法用于排序List.Sort()。我使用了以Comparison委托为参数的版本,并定义了如下函数:

public static int Compare(KeyValuePair v1,KeyValuePair v2)
{
     return v1.id.CompareTo(v2.id);
}

我知道,这是一个非常不规范的Comparison定义,应该先检查对象是否为null等等。不过这里只是测试而已,我只想看看List.Sort最快能到什么程度。测试数据为一个有5k元素的List,和5个每个有1k元素的List。通过多次测试,以减少噪音干扰,结果都在2~3ms之间,令人印象非常深刻,足以满足大部份应用的需求。可惜对我的目标来说,还是差了一点。


参考资料:http://www.pin5i.com/showtopic-24424.html

发布了105 篇原创文章 · 获赞 72 · 访问量 24万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览