`
sangei
  • 浏览: 337259 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

C# List去重的三种方法(转)

阅读更多

三种去重的方法

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

2、使用表达式

[csharp] view plaincopy
 
  1. users.Where((x,i)=>users.FindIndex(z=>z.name == x.name) == i)  

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

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

 

 

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

分享到:
评论

相关推荐

    C#list集合按元素出现次数排序取值(含去重功能)

    此文件搭配本人发表的文章:C#list集合按元素出现次数排序取值(含去重功能),资源完全免费下载,不收取任何费用,纯粹的技术交流。联系方式在文章中有,喜欢的朋友们可以互相交流一下。

    C#合并一维字符串数组并去重

    在.NET框架中,C#是一种常用的编程语言,用于开发各种应用程序。在处理数据时,我们经常需要对一维数组进行操作,例如合并和去重。本文将深入探讨如何在C#中实现这些功能,以及一些可能遇到的挑战和解决策略。 首先...

    C#对多个集合和数组的操作方法(合并,去重,判断)

    List&lt;int&gt; listA = new List&lt;int&gt; {1,2,3,5,7,9}; List&lt;int&gt; listB = new List&lt;int&gt; {13,4,17,29,2}; listA.AddRange(listB ); 把集合A.B合并 List&lt;int&gt; Result = listA.Union(listB).ToList(); //剔除重复项 List...

    C# 实现Distinct将对象按条件去重

    也可以用于对象去重,我们看看C#对Distinct方法的定义: 有重载,第一个参数都加了this,是拓展方法,有关拓展方法,请百度了解。 下面我们来研究下Distinct的对象去重,假设我们现在有一个People类: public ...

    c# linq的差集,并集,交集,去重代码(分享)

    如下所示: using System.Linq; List&lt;string&gt; ListA = new List(); List&lt;string&gt; ListB = ...//去重 ListResult = ListA.Except(ListB).ToList();//差集 ListResult= ListA.Union(ListB).ToList(); //并集 ListResul

    过滤、排序、分组、去重、改名、计算列、关联、子查询、集合计算

    1. **过滤(Filtering)**:在C#中,我们通常使用`Where`方法来过滤集合中的元素,根据指定的条件筛选出满足要求的数据。例如,`List&lt;T&gt;.FindAll`或`LINQ`的`Where`表达式可以帮助我们实现这一功能。 2. **排序...

    C#高性能枚举去除泛型中的重复数据

    泛型(Generic)则是C#中提供的一种强大的类型安全机制,允许开发者创建可重用的数据结构和方法,而不指定具体的类型。泛型类、接口、委托和方法都可以使用类型参数,这样在编译时就能确保类型的安全性,同时在运行...

    合并一维字符串数组并去重 C#

    在C#编程中,合并一维字符串数组并去重是一个常见的任务,特别是在处理数据集合或者进行数据整合时。本文将详细讲解如何实现这个功能,并提供相关的代码示例。 首先,我们要理解C#中的数组和字符串的基本概念。数组...

    C# 读取一个文件夹中多个txt,去重正则化后重新写入,要求每个不能超过二十万行

    本程序主要采用C#,完成一个文件夹中的多个txt读取,本人的测试时,读取的是多个手机号码,每一个号码占一行,对多个文档中的手机号码进行正则化,并去重复处理,重新写入多个txt,中,每个txt要求不超过二十万行。

    list和数组去重,记录重复次数

    java list集合和数组去除重复项,并记录重复次数个数。

    C#数组遍历

    C#作为一种现代的、面向对象的编程语言,提供了多种方法来操作和遍历数组。本教程将深入讲解C#中的数组遍历,这对于初学者理解如何处理数组至关重要。 一、数组的基本概念 在C#中,数组是一系列相同类型数据的有序...

    利用Distinct()内置方法对List集合的去重问题详解

    "利用Distinct()内置方法对List集合的去重问题详解" 知识点1:List&lt;T&gt; 集合的去重问题 List&lt;T&gt; 集合是泛型链表,实现了IEnumerable接口,规定了Distinct方法。但是,Distinct方法不能直接应用于引用类型的集合去重...

    ILIST添加操作去掉重复的名字

    在C#编程中,`IList&lt;T&gt;`是.NET框架中的一种接口,它是`IList`接口的泛型版本,提供了对列表数据的操作方法。当我们处理一个`IList&lt;T&gt;`对象时,有时候需要确保添加的元素不与现有元素重复,以保持列表的唯一性。这个...

    寻峰算法-c#

    导数法是一种常用的寻峰方法,可以通过计算数据的一阶或二阶导数来识别峰。 - **一阶导数法**:在一阶导数由正变负的地方确定峰位。 - **二阶导数法**:在二阶导数等于零的地方确定峰位。 ```csharp public void ...

    C# Txt文本去重复和交叉数据

    C#是一种面向对象的编程语言,它提供了丰富的库和功能来处理文本数据。处理TXT文件,我们通常会使用`System.IO`命名空间中的类,如`StreamReader`和`StreamWriter`,它们分别用于读取和写入文本文件。首先,我们需要...

    完美解决c# distinct不好用的问题

    当一个结合中想根据某一个字段做去重方法时使用以下代码 IQueryable 继承自IEnumerable 先举例: #region linq to object List&lt;People&gt; peopleList = new List(); peopleList.Add(new People { UserName = zzl, ...

    C# 有关List&lt;T&gt;的Contains与Equals方法.doc

    本文主要关注 `List&lt;T&gt;` 的两个关键方法:`Contains()` 和 `Equals()`,以及它们在处理集合比较和去重时的作用。 `Contains()` 方法: 此方法用于判断 `List&lt;T&gt;` 是否包含指定的元素。它接受一个参数 `T`,即列表中...

    EFCore查询不重复数据Distinct.docx

    `Select(p =&gt; p.name)`将每个表记录投影为`name`属性的值,然后`Distinct()`方法在这些值上执行去重操作,最后`ToList()`将结果转换为列表。 然而,如果需要根据两个字段去重,情况会稍微复杂一些。`Distinct()`...

Global site tag (gtag.js) - Google Analytics