您好,欢迎访问一九零五行业门户网

去重和排序如何操作

去重和排序是开发过程中经常碰到的问题,这篇文章就来总结一下。
去重方法1:使用内置的distinct
代码如下:
//方法1:使用默认的distinct方法//只能针对基元类型列表,对于自定义类型组合字段条件需要自定义相等比较器实现iequalitycomparer接口,比较麻烦var result1 = list.distinct().tolist();
方法2:使用groupby
代码如下:
//方法2:使用groupbyvar result2 = list.groupby(p => new { p.bunkcode, p.bunkprice })     .select(p => p.first())     .tolist();
方法3:使用自己扩展的distinctby方法
代码如下:
//方法3:使用自己扩展的distinctby方法//利用hashset的key不能重复的特性var result3 = list.distinctby(p => new { p.bunkcode, p.bunkprice })     .tolist();
完整代码请参考:
/// <summary>/// 测试类型/// </summary>public class testdistinctclass {public int id { get; set; }public string bunkcode { get; set; }public double bunkprice { get; set; } }/// <summary>/// 测试去重/// </summary>private static void testdistinct() {//数据源var list = new list<testdistinctclass>      {new testdistinctclass         {             id= 1,             bunkcode= a,             bunkprice= 101},new testdistinctclass         {             id= 2,             bunkcode= b,             bunkprice= 102},new testdistinctclass         {             id= 3,             bunkcode= c,             bunkprice= 103},new testdistinctclass         {             id= 4,             bunkcode= d,             bunkprice= 104},new testdistinctclass         {             id= 5,             bunkcode= a,             bunkprice= 101}     };//方法1:使用默认的distinct方法//只能针对基元类型列表,对于自定义类型组合字段条件需要自定义相等比较器实现iequalitycomparer接口,比较麻烦var result1 = list.distinct().tolist();//方法2:使用groupbyvar result2 = list.groupby(p => new { p.bunkcode, p.bunkprice })         .select(p => p.first())         .tolist();//方法3:使用自己扩展的distinctby方法//利用hashset的key不能重复的特性var result3 = list.distinctby(p => new { p.bunkcode, p.bunkprice })         .tolist(); }
同时,我把扩展方法也贴出来:
/// <summary>/// 扩展distinct/// </summary>/// <typeparam name="tsource"></typeparam>/// <typeparam name="tkey"></typeparam>/// <param name="source"></param>/// <param name="keyselector"></param>/// <returns></returns>public static ienumerable<tsource> distinctby<tsource, tkey>(this ienumerable<tsource> source, func<tsource, tkey> keyselector) {     hashset<tkey> seenkeys = new hashset<tkey>();foreach (tsource element in source)     {if (seenkeys.add(keyselector(element)))         {yield return element;         }     } }
排序至于排序,使用linq提供的api就好了,如下图:
以上就是去重和排序如何操作的详细内容。
其它类似信息

推荐信息