博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用泛型的IEqualityComparer接口去重复项 .
阅读量:6359 次
发布时间:2019-06-23

本文共 1641 字,大约阅读时间需要 5 分钟。

写这个源于这个网友的题问:

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

ID Name

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

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

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

我们可能经常用的

这里要用使用指定的 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.  }  
public class User { public User(int id, string name) { Id = id; Name = name; } public int Id { get; set; } public string Name { get; set; } }

二、再自定义一个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. }  
public class UserComparer : IEqualityComparer<User> { #region IEqualityComparer<User> 成员 public bool Equals(User x, User y) { if (x.Id == y.Id && x.Name == y.Name) return true; else return false; } public int GetHashCode(User obj) { return 0; } #endregion }

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

 

  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. }  

转载地址:http://zfbma.baihongyu.com/

你可能感兴趣的文章
配置公司内部exchange服务器与外部邮箱服务器通信
查看>>
oracle large pool
查看>>
export的变量另开一个终端失效解决方法
查看>>
RH124 Chapter 3 Getting Help in Red Hat Enterprise Linux
查看>>
键盘 钩子 的代码
查看>>
198. House Robber(强盗抢劫)(LeetCode)
查看>>
window对象
查看>>
将之前的Power idea公司的数据按照下图所示的格式在屏幕上显示出来。
查看>>
构建高并发高可用的电商平台架构实践----网址记录
查看>>
[android] 手机卫士黑名单功能(ListView结合SQLite增删改)
查看>>
ubuantu 18.04 LTS 版本解决网易云安装启动问题
查看>>
PHP 无限分类
查看>>
【leetcode】226. Invert Binary Tree
查看>>
软件项目顾问的20法则
查看>>
Java 强引用、软引用、弱引用、虚引用
查看>>
wget 命令用法详解
查看>>
centOS安装apache服务器
查看>>
第三个Sprint冲刺第一天
查看>>
使用yum仅下载不安装
查看>>
0420-mysql关键词/错误提示关键词
查看>>