三种去重的方法
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集合按元素出现次数排序取值(含去重功能),资源完全免费下载,不收取任何费用,纯粹的技术交流。联系方式在文章中有,喜欢的朋友们可以互相交流一下。
在.NET框架中,C#是一种常用的编程语言,用于开发各种应用程序。在处理数据时,我们经常需要对一维数组进行操作,例如合并和去重。本文将深入探讨如何在C#中实现这些功能,以及一些可能遇到的挑战和解决策略。 首先...
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
1. **过滤(Filtering)**:在C#中,我们通常使用`Where`方法来过滤集合中的元素,根据指定的条件筛选出满足要求的数据。例如,`List<T>.FindAll`或`LINQ`的`Where`表达式可以帮助我们实现这一功能。 2. **排序...
泛型(Generic)则是C#中提供的一种强大的类型安全机制,允许开发者创建可重用的数据结构和方法,而不指定具体的类型。泛型类、接口、委托和方法都可以使用类型参数,这样在编译时就能确保类型的安全性,同时在运行...
在C#编程中,合并一维字符串数组并去重是一个常见的任务,特别是在处理数据集合或者进行数据整合时。本文将详细讲解如何实现这个功能,并提供相关的代码示例。 首先,我们要理解C#中的数组和字符串的基本概念。数组...
本程序主要采用C#,完成一个文件夹中的多个txt读取,本人的测试时,读取的是多个手机号码,每一个号码占一行,对多个文档中的手机号码进行正则化,并去重复处理,重新写入多个txt,中,每个txt要求不超过二十万行。
java list集合和数组去除重复项,并记录重复次数个数。
C#作为一种现代的、面向对象的编程语言,提供了多种方法来操作和遍历数组。本教程将深入讲解C#中的数组遍历,这对于初学者理解如何处理数组至关重要。 一、数组的基本概念 在C#中,数组是一系列相同类型数据的有序...
"利用Distinct()内置方法对List集合的去重问题详解" 知识点1:List<T> 集合的去重问题 List<T> 集合是泛型链表,实现了IEnumerable接口,规定了Distinct方法。但是,Distinct方法不能直接应用于引用类型的集合去重...
在C#编程中,`IList<T>`是.NET框架中的一种接口,它是`IList`接口的泛型版本,提供了对列表数据的操作方法。当我们处理一个`IList<T>`对象时,有时候需要确保添加的元素不与现有元素重复,以保持列表的唯一性。这个...
导数法是一种常用的寻峰方法,可以通过计算数据的一阶或二阶导数来识别峰。 - **一阶导数法**:在一阶导数由正变负的地方确定峰位。 - **二阶导数法**:在二阶导数等于零的地方确定峰位。 ```csharp public void ...
C#是一种面向对象的编程语言,它提供了丰富的库和功能来处理文本数据。处理TXT文件,我们通常会使用`System.IO`命名空间中的类,如`StreamReader`和`StreamWriter`,它们分别用于读取和写入文本文件。首先,我们需要...
当一个结合中想根据某一个字段做去重方法时使用以下代码 IQueryable 继承自IEnumerable 先举例: #region linq to object List<People> peopleList = new List(); peopleList.Add(new People { UserName = zzl, ...
本文主要关注 `List<T>` 的两个关键方法:`Contains()` 和 `Equals()`,以及它们在处理集合比较和去重时的作用。 `Contains()` 方法: 此方法用于判断 `List<T>` 是否包含指定的元素。它接受一个参数 `T`,即列表中...
`Select(p => p.name)`将每个表记录投影为`name`属性的值,然后`Distinct()`方法在这些值上执行去重操作,最后`ToList()`将结果转换为列表。 然而,如果需要根据两个字段去重,情况会稍微复杂一些。`Distinct()`...