C# List去重的三种方法
三种去重的方法
1、List中的元素实现IEquatabe接口,并提供Equals方法和GetHashCode方法。
2、使用表达式
- users.Where((x,i)=>users.FindIndex(z=>z.name == x.name) == i)
去重,这条语句返回结果只保留users这个List中重复的元素的第一个(name相等认为重复)。
3、使用循环,判断每个元素是否重复
- using System;
- using System.Collections.Generic;
- using System.Linq;
- namespace NonDuplicateList
- {
- class Program
- {
- static void Main(string[] args)
- {
- List<User> users = new List<User>();
- users.Add(new User("张三", "永丰路299号"));
- users.Add(new User("张三", "上地西路8号"));//重复项,去重后将删掉
- users.Add(new User("李四", "海鹰路甲一号"));
- List<User> nonDuplicateList1 = users.Distinct().ToList();//通过User类的Equals实现去重
- List<User> nonDuplicateList2 = users.Where((x,i)=>users.FindIndex(z=>z.name == x.name) == i).ToList();//Lambda表达式去重
- List<User> nonDuplicateList3 = new List<User>();//通过循环方式去重
- foreach(User user in users)
- {
- if(nonDuplicateList3.Exists(x=>x.name==user.name) == false)
- {
- nonDuplicateList3.Add(user);
- }
- }
- foreach(List<User> list in new Object[]{nonDuplicateList1,nonDuplicateList2,nonDuplicateList3})//打印出三个List的元素
- {
- Console.Write("nonDuplicateList:\r\n");
- foreach(User u in list)
- {
- Console.WriteLine("\t" + u.ToString());
- }
- }
- Console.Read();
- }
- }
- class User:IEquatable<User>//继承IEquatable接口,实现Equals方法。List就可以使用Distinct去重
- {
- public string name { get; set; }
- string address;
- public User(string _name, string _address)
- {
- name = _name;
- address = _address;
- }
- public override string ToString()
- {
- return string.Format("name:{0},\taddress:{1}", name, address);
- }
- public bool Equals(User other)
- {
- return this.name == other.name;
- }
- public override int GetHashCode()
- {
- return name.GetHashCode();
- }
- }
- }
C# List去重的三种方法的更多相关文章
- C# List去重的三种方法(转)
三种去重的方法 1.List中的元素实现IEquatabe接口,并提供Equals方法和GetHashCode方法. 2.使用表达式 users.Where((x,i)=>users.FindI ...
- js数组去重的三种方法
<script type="text/javascript"> /*// 第一种冒泡法删除 var arr=[1,2,2,78,3,456,456]; for(var ...
- js 数组去重的三种方法(unique)
方法一: Array.prototype.unique=function(){ var arr=[];//新建一个临时数组 for(var i=0;i<this.length;i++){//遍历 ...
- 数组去重的三种方法及from方法
直接上代码: var str="adbbckddwerivka"; var arr=str.split(""); console.log(arr); //ind ...
- Python列表去重的三种方法
1. 列表去重 li = [] for item in my_list: if item not in li: li.append(item) 2.集合去重 list(set(my_list)) 3. ...
- 数组去重的三种方法 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)); } ...
- (PASS)JAVA数组去重 三种方法 (不用集合)
第一种方法(只学到数组的看): 定义一个新的数组长度和旧数组的长度一样,存储除去重复数据的旧数组的数据和0, package demo01; import java.sql.Array; import ...
- 去除DataTable重复数据的三种方法(转)
转自:https://www.cnblogs.com/sunxi/p/4767577.html 业务需求 最近做一个把源数据库的数据批次导出到目标数据库.源数据库是采集程序采集而来的原始数据库,所以需 ...
- c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)
c#封装DBHelper类 public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...
随机推荐
- jstat 简介
1. jstat -gc pid 可以显示gc的信息,查看gc的次数,及时间. 其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc ...
- M0 M4关于库函数的讲解(以时钟为例)
#define CLK_PWRCON_PD_WAIT_CPU_Pos 8 #define CLK_PWRCON_PD_WAIT_CPU_Msk (1ul << CLK_PWRCON_PD_ ...
- 【netcore入坑记】 .Net core UseRowNumberForPaging 分页报错 SQL Server 2008 R2 EntityFrameworkCore
异常环境: netcore版本:.Net Core 2.1 efcore版本:Microsoft.EntityFrameworkCore.SqlServer 2.1.1 sql sqlserver 版 ...
- js中if语句的几种优化代码写法
UglifyJS是一个对javascript进行压缩和美化的工具,在它的文档说明中,我看到了几种关于if语句优化的方法. 一.使用常见的三元操作符 复制代码 代码如下: if (foo) bar(); ...
- 壁虎书4 Training Models
Linear Regression The Normal Equation Computational Complexity 线性回归模型与MSE. the normal equation: a cl ...
- {MySQL完整性约束}一 介绍 二 not null与default 三 unique 四 primary key 五 auto_increment 六 foreign key 七 作业
MySQL完整性约束 阅读目录 一 介绍 二 not null与default 三 unique 四 primary key 五 auto_increment 六 foreign key 七 作业 一 ...
- ThinkPHP最简教程
这里不讲原理,只讲操作. 这里不说MVC,只说目录(文件夹)结构. 假设Apache Http Server.PHP.MySql都已经安装完毕并已配置完毕,能够输出phpinfo(). 框架是什么? ...
- CH 4401/Luogu 4168 - 蒲公英 - [分块]
题目链接:传送门 题目链接:https://www.luogu.org/problemnew/show/P4168 题解: 经典的在线求区间众数的问题,由于区间众数不满足区间可加性,所以考虑分块,假设 ...
- MyBatis中choose when正确写法
<choose> <when test="scoreRange!=null and scoreRange eq 1"> AND sc.score <! ...
- MySQL服务器线程数的查看方法详解
本文实例讲述了MySQL服务器线程数的查看方法.分享给大家供大家参考,具体如下: mysql重启命令: ? 1 /etc/init.d/mysql restart MySQL服务器的线程数需要在一个合 ...