• 用泛型的IEqualityComparer接口去重复项 .


    写这个源于这个网友的题问:http://topic.csdn.net/u/20110803/16/031363d0-831d-4795-8c29-458d1271cc83.html?48229


    题目:下列数据放在一个List中,当ID和Name都相同时,去掉重复数据

    ID Name
    1  张三
    1  李三
    1  小伟
    1  李三 
    2  李四
    2  李武

    ------------------------------------------------------------------------------------------------------------

    解决这个问题,方法很多,最开始想到的就Enumerable.Distinct方法

    我们可能经常用的Distinct<TSource>(IEnumerable<TSource>)

    这里要用Distinct<TSource>(IEnumerable<TSource>, IEqualityComparer<TSource>) 使用指定的 IEqualityComparer<T> 对值进行比较


     一、先为数据做个实体类:User

    1. public class User  
    2. {  
    3.      public User(int id, string name)  
    4.      {  
    5.          Id = id;  
    6.          Name = name;  
    7.      }  
    8.   
    9.      public int Id { getset; }  
    10.   
    11.      public string Name { getset; }  
    12.  }  

    二、再自定义一个User比较类(实现IEqualityComparer<T>接口):UserComparer

    1. public class UserComparer : IEqualityComparer<User>  
    2. {  
    3.     #region IEqualityComparer<User> 成员   
    4.     public bool Equals(User x, User y)  
    5.     {  
    6.         if (x.Id == y.Id && x.Name == y.Name)         
    7.             return true;           
    8.         else             
    9.             return false;             
    10.     }  
    11.   
    12.     public int GetHashCode(User obj)  
    13.     {  
    14.         return 0;  
    15.     }  
    16.     #endregion   
    17. }  

    三、最后是去重复测式类:

    1.  public class MainClass  
    2.  {  
    3.     public static void Main()  
    4.     {  
    5.         List<User> list = new List<User>();  
    6.         list.Add(new User(1, "张三"));  
    7.         list.Add(new User(1, "李三"));  
    8.         list.Add(new User(1, "小伟"));  
    9.         list.Add(new User(1, "李三"));  
    10.         list.Add(new User(2, "李四"));  
    11.         list.Add(new User(2, "李武"));  
    12.   
    13.         var query = list.Distinct(new UserComparer());  
    14.   
    15.         foreach (var item in query)  
    16.         {  
    17.             Console.WriteLine(item.Id + "," + item.Name);  
    18.         }  
    19.   
    20.         Console.ReadLine();  
    21.         //输出结果:  
    22.         // 1 , 张三  
    23.         // 1 , 李三  
    24.         // 1 , 小伟                  
    25.         // 2 , 李四  
    26.         // 2 , 李武  
    27.     }  
    28. }  
  • 相关阅读:
    vim删除某一列
    linux下在当前文件夹查找一个字符串信息
    .tar和.tar.gz的区别
    visual studio中调用masm汇编
    iconv转码失败的原因
    终端查看
    kubectl 常用命令总结
    Charles实战之Charles抓取https请求
    Fiddler实战之拟2G、3G、4G网络进行弱网测试
    Fiddler实战之使用Fiddler模拟弱网环境
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/2177118.html
Copyright © 2020-2023  润新知