三种去重的方法

1、List中的元素实现IEquatabe接口,并提供Equals方法和GetHashCode方法。

2、使用表达式

  1. users.Where((x,i)=>users.FindIndex(z=>z.name == x.name) == i)

去重,这条语句返回结果只保留users这个List中重复的元素的第一个(name相等认为重复)。

3、使用循环,判断每个元素是否重复

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. namespace NonDuplicateList
  5. {
  6. class Program
  7. {
  8. static void Main(string[] args)
  9. {
  10. List<User> users = new List<User>();
  11. users.Add(new User("张三", "永丰路299号"));
  12. users.Add(new User("张三", "上地西路8号"));//重复项,去重后将删掉
  13. users.Add(new User("李四", "海鹰路甲一号"));
  14. List<User> nonDuplicateList1 = users.Distinct().ToList();//通过User类的Equals实现去重
  15. List<User> nonDuplicateList2 = users.Where((x,i)=>users.FindIndex(z=>z.name == x.name) == i).ToList();//Lambda表达式去重
  16. List<User> nonDuplicateList3 = new List<User>();//通过循环方式去重
  17. foreach(User user in users)
  18. {
  19. if(nonDuplicateList3.Exists(x=>x.name==user.name) == false)
  20. {
  21. nonDuplicateList3.Add(user);
  22. }
  23. }
  24. foreach(List<User> list in new Object[]{nonDuplicateList1,nonDuplicateList2,nonDuplicateList3})//打印出三个List的元素
  25. {
  26. Console.Write("nonDuplicateList:\r\n");
  27. foreach(User u in list)
  28. {
  29. Console.WriteLine("\t" + u.ToString());
  30. }
  31. }
  32. Console.Read();
  33. }
  34. }
  35. class User:IEquatable<User>//继承IEquatable接口,实现Equals方法。List就可以使用Distinct去重
  36. {
  37. public string name { get; set; }
  38. string address;
  39. public User(string _name, string _address)
  40. {
  41. name = _name;
  42. address = _address;
  43. }
  44. public override string ToString()
  45. {
  46. return string.Format("name:{0},\taddress:{1}", name, address);
  47. }
  48. public bool Equals(User other)
  49. {
  50. return this.name == other.name;
  51. }
  52. public override int GetHashCode()
  53. {
  54. return name.GetHashCode();
  55. }
  56. }
  57. }

 

C# List去重的三种方法(转)的更多相关文章

  1. C# List去重的三种方法

    三种去重的方法 1.List中的元素实现IEquatabe接口,并提供Equals方法和GetHashCode方法. 2.使用表达式 users.Where((x,i)=>users.FindI ...

  2. js数组去重的三种方法

    <script type="text/javascript"> /*// 第一种冒泡法删除 var arr=[1,2,2,78,3,456,456]; for(var ...

  3. js 数组去重的三种方法(unique)

    方法一: Array.prototype.unique=function(){ var arr=[];//新建一个临时数组 for(var i=0;i<this.length;i++){//遍历 ...

  4. 数组去重的三种方法及from方法

    直接上代码: var str="adbbckddwerivka"; var arr=str.split(""); console.log(arr); //ind ...

  5. Python列表去重的三种方法

    1. 列表去重 li = [] for item in my_list: if item not in li: li.append(item) 2.集合去重 list(set(my_list)) 3. ...

  6. 数组去重的三种方法 es6

    [1,2,3,4,5,6,7,8,9,2,2,3,3,4,1].filter(function(el,index,arr){ return (index === arr.indexOf(el)); } ...

  7. (PASS)JAVA数组去重 三种方法 (不用集合)

    第一种方法(只学到数组的看): 定义一个新的数组长度和旧数组的长度一样,存储除去重复数据的旧数组的数据和0, package demo01; import java.sql.Array; import ...

  8. 去除DataTable重复数据的三种方法(转)

    转自:https://www.cnblogs.com/sunxi/p/4767577.html 业务需求 最近做一个把源数据库的数据批次导出到目标数据库.源数据库是采集程序采集而来的原始数据库,所以需 ...

  9. c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)

    c#封装DBHelper类   public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...

随机推荐

  1. ubuntu中subline无法使用搜狗输入法

    今天使用subline编写python程序,发现在ubuntu下无法调用搜狗输入法输入中文,结果一番搜索发现github上的sublime-text-imfix项目能修复此问题,项目地址是:https ...

  2. js数据类型有哪些,js属性和方法的归属,

    1.js的数据类型有哪些? 2.全局方法和全局属性? 一 1.js的本质就是处理数据,数据来自后台的数据库.所以变量就起到一个临时存储数据的作用. ECMAScript 制定了js的数据类型. 数据类 ...

  3. 12 Linux Which Command, Whatis Command, Whereis Command Examples

    This Linux tutorial will explain the three "W" commands. The three "W"s are what ...

  4. 全网最贴心webpack系列教程和配套代码

    webpack-demos:全网最贴心 webpack 系列教程和配套代码 欢迎关注个人技术博客:godbmw.com.每周 1 篇原创技术分享!开源教程(webpack.设计模式).面试刷题(偏前端 ...

  5. 数据库索引(Oracle和Mysql)学习总结

    旭日Follow_24 的CSDN 博客 ,全文地址请点击: https://mp.csdn.net/postedit/80910082 索引概念:     索引是关系数据库中用于存放每一条记录的一种 ...

  6. Java基础-一文搞懂位运算

    在日常的Java开发中,位运算使用的不多,使用的更多的是算数运算(+.-.*./.%).关系运算(<.>.<=.>=.==.!=)和逻辑运算(&&.||.!), ...

  7. 远程过程调用概述-RMI简介

    简介: RPC是远程过程调用(Remote Procedure Call)的缩写形式.SAP系统RPC调用的原理其实很简单,有一些类似于三层构架的C/S系统,第三方的客户程序通过接口调用SAP内部的标 ...

  8. C#DataTable复制、C#DataTable列复制、C#DataTable字段复制

    try { //获取满足条件的数据 DataTable Mdr = datable.Select().ToString("yyyy-MM-dd HH:mm:ss") + " ...

  9. es6 语法 (字符串扩展)

    { console.log('a',`\u0061`); //a,a console.log('s',`\u20BB7`); //s ₻7 console.log('s',`\u{20BB7}`) / ...

  10. iOS------获取当前时间和当前时间戳

    //获取当前的时间 +(NSString*)getCurrentTimes{ NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; ...