zoukankan      html  css  js  c++  java
  • 用泛型的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. }  
  • 相关阅读:
    Java 21-Spring知识
    Java18-黑马旅游网学习制作
    Java17-Filter&Listener&Json&redis&maven
    python发邮件
    一元模型拟合(OLS和插值np拟合)
    一元模型拟合
    2.13 描述性统计(平均数,中位数,中数,数据的离散度(极差,平均绝对偏差,方差标准差))
    tushare 股票数据获取,收益率计算,直方图绘制
    主板指数数据的爬取(selenium处理JS)
    网页整页截图小工具
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/2177118.html
Copyright © 2011-2022 走看看