三种去重的方法
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集合按元素出现次数排序取值(含去重功能),资源完全免费下载,不收取任何费用,纯粹的技术交流。联系方式在文章中有,喜欢的朋友们可以互相交流一下。
List<int> listA = new List<int> {1,2,3,5,7,9}; List<int> listB = new List<int> {13,4,17,29,2}; listA.AddRange(listB ); 把集合A.B合并 List<int> Result = listA.Union(listB).ToList(); //剔除重复项 List...
也可以用于对象去重,我们看看C#对Distinct方法的定义: 有重载,第一个参数都加了this,是拓展方法,有关拓展方法,请百度了解。 下面我们来研究下Distinct的对象去重,假设我们现在有一个People类: public ...
如下所示: using System.Linq; List<string> ListA = new List(); List<string> ListB = ...//去重 ListResult = ListA.Except(ListB).ToList();//差集 ListResult= ListA.Union(ListB).ToList(); //并集 ListResul
本程序主要采用C#,完成一个文件夹中的多个txt读取,本人的测试时,读取的是多个手机号码,每一个号码占一行,对多个文档中的手机号码进行正则化,并去重复处理,重新写入多个txt,中,每个txt要求不超过二十万行。
说到对集合去重处理,第一时间想到的肯定是Linq的Distinct扩展方式,对于一般的值类型集合去重,很好处理,直接list.Distinct()即可。但是如果想要对一个引用类型的集合去重(属性值都相同就认为重复),就会发现,...
当一个结合中想根据某一个字段做去重方法时使用以下代码 IQueryable 继承自IEnumerable 先举例: #region linq to object List<People> peopleList = new List(); peopleList.Add(new People { UserName = zzl, ...
主要介绍了C#中查找Dictionary中的重复值的方法,需要的朋友可以参考下
c#使用枚举高性能去除泛型中重复数据1KW只需要3秒
遍历这个List输出,之后利用C#的另一个容器HashSet为这个List去重。 这个程序的代码如下,其实以上所有的东西都在以前的文章说过。这主要是将这种思想写成C#语言而已。 关于正则表达式可以参考:《js利用正则...
DFrame是一个轻量级ORM框架。它内部集成SQLHelper组件和Dapper框架。 DFrame.Common命名空间集成: 1:EncryptDecrypt(AES/Base64/DES/HmacSha/MD5/SHA/RSA);... 2: List<TResult> ToList() 3: int Delete()