提供者:porschev

题目:下列数据放在一个List中,当ID和Name都相同时,去掉重复数据

ID Name

1  张三
1  李三
1  小伟
1  李三 
2  李四
2  李武

------------------------------------------------------------------------------------------------------------

解决这个问题,方法很多,最开始想到的就Enumerable.Distinct方法

我们可能经常用的是Distinct<TSource>(IEnumerable<TSource>)

用它对数组这一类去重复

这里要用Distinct<TSource>(IEnumerable<TSource>, IEqualityComparer<TSource>)使用指定的 IEqualityComparer<T> 对值进行比较

一、先为数据做个实体类:User

 public class User
{
public User(int id, string name)
{
Id = id;
Name = name;
} public int Id { get; set; } public string Name { get; set; }
}

二、再自定义一个User比较类(实现IEqualityComparer<T>接口):UserComparer

 public class UserComparer : IEqualityComparer<User>
{
#region IEqualityComparer<User> 成员
public bool Equals(User x, User y)
{
if (x.Id == y.Id && x.Name == y.Name) //分别对属性进行比较
return true;
else
return false;
} public int GetHashCode(User obj)
{
return ;
}
#endregion
}

自定义一个比较类,去继承IEqualityComparer接口,做一个Distinct方法的比较器。。

Equals方法中对实体进行和你需求相关的比较操作,返回bool类型的返回值

三、最后是去重复测式类:

XXXX.Distinct(new UserComparer());进行去重复操作
  public class MainClass
{
public static void Main()
{
List<User> list = new List<User>(); //添加一些测式数据
list.Add(new User(, "张三"));
list.Add(new User(, "李三"));
list.Add(new User(, "小伟"));
list.Add(new User(, "李三"));
list.Add(new User(, "李四"));
list.Add(new User(, "李武")); var query = list.Distinct(new UserComparer()); //去重复 foreach (var item in query)
{
Console.WriteLine(item.Id + "," + item.Name); //输出Distinct之后的结果
} Console.ReadLine(); //输出结果:
// 1 , 张三
// 1 , 李三
// 1 , 小伟
// 2 , 李四
// 2 , 李武
}
}

或者直接:

 public class User:IEqualityComparer<User>
{
public User(int id, string name)
{
Id = id;
Name = name;
} public int Id { get; set; } public string Name { get; set; } public bool Equals(User x, User y)
{
if (x.Id == y.Id && x.Name == y.Name) //分别对属性进行比较
return true;
else
return false;
} public int GetHashCode(User obj)
{
return ;
}
}
public class MainClass
{
public static void Main()
{
List<User> list = new List<User>(); //添加一些测式数据
list.Add(new User(, "张三"));
list.Add(new User(, "李三"));
list.Add(new User(, "小伟"));
list.Add(new User(, "李三"));
list.Add(new User(, "李四"));
list.Add(new User(, "李武")); var query = list.Distinct(new User()); //去重复 foreach (var item in query)
{
Console.WriteLine(item.Id + "," + item.Name); //输出Distinct之后的结果
} Console.ReadLine(); //输出结果:
// 1 , 张三
// 1 , 李三
// 1 , 小伟
// 2 , 李四
// 2 , 李武
}
}

用泛型的IEqualityComparer<T>接口去重复项的更多相关文章

  1. [2012-05-31]awk去重复项

    参考http://bbs.chinaunix.net/thread-2309494-1-1.html 10.awk '! a[$0]++' 怎么理解? 这是一个非常经典的去重复项的awk语句,虽然短小 ...

  2. VBA RemoveDuplicates方法去重复项

    RemoveDuplicates后边必须跟参数否则不起作用 ActiveSheet.Range("G21:R36").RemoveDuplicates Columns:=12, H ...

  3. 为了去重复,写了一个通用的比较容器类,可以用在需要比较的地方,且支持Lamda表达式

    为了去重复,写了一个通用的比较容器类,可以用在需要比较的地方,且支持Lamda表达式,代码如下: public class DataComparer<T>:IEqualityCompare ...

  4. 利用Linq对集合元素合并、去重复处理

    本文转载:http://www.cnblogs.com/yjmyzz/archive/2012/12/18/2823170.html 今天写代码时,需要对一个数组对象中按一定规则合并.去重处理,不想再 ...

  5. ASP.Net【如何合并DataTable,并且去重复方法】

    虽然DataTable.Merge可以很好的实现,但以下代码写出来更好理解 DataTable DataTable1 = new DataTable(); DataTable DataTable2 = ...

  6. 如何求ArrayList集合的交集 并集 差集 去重复并集

    需要用到List接口中定义的几个方法: addAll(Collection<? extends E> c) :按指定集合的Iterator返回的顺序将指定集合中的所有元素追加到此列表的末尾 ...

  7. 泛型(Generic)接口

    泛型接口例子:一个学生有一个独一无二的ID,但是每个学生的姓名不一定是唯一的. class Program { static void Main(string[] args) { Student< ...

  8. mysql数据库去重复

    参考:http://www.cnblogs.com/duanjie/archive/2011/08/13/2136862.html 说到去重复,感觉逻辑很简单.但动手写起来却并不是那么容易.面试的时候 ...

  9. 关系数据库SQL之高级数据查询:去重复、组合查询、连接查询、虚拟表

    前言 接上一篇关系数据库SQL之基本数据查询:子查询.分组查询.模糊查询,主要是关系型数据库基本数据查询.包括子查询.分组查询.聚合函数查询.模糊查询,本文是介绍一下关系型数据库几种高级数据查询SQL ...

随机推荐

  1. hadoop2 作业执行过程之reduce过程

    reduce阶段就是处理map的输出数据,大部分过程和map差不多 //ReduceTask.run方法开始和MapTask类似,包括initialize()初始化,根据情况看是否调用runJobCl ...

  2. java中的链式编程

    听到链式编程听陌生的,但是写出来就感觉其实很熟悉 package test; public class Test { String name; String phone; String mail; S ...

  3. 利用map可以对很大的数出现的次数进行记数

    Problem Description In the year 8888, the Earth is ruled by the PPF Empire . As the population growi ...

  4. ios uitableviewcell动态计算高度

    #import <UIKit/UIKit.h> @interface TestCell : UITableViewCell @property (weak, nonatomic) IBOu ...

  5. CSS3: border-radius边框圆角详解

    border-radius 基本语法: border-radius : none | <length>{1,4} [/ <length>{1,4} ]? 取值范围: <l ...

  6. c#代码使用ResourceDictionary样式

    对于ResourceDictionary样式代码: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006 ...

  7. C#使用简单邮件传输协议(SMTP)发送邮件

    1.首先引入命名空间: using System.Net.Mail; 2.定义邮件配置类: public class EmailServiceConfig { /// <summary> ...

  8. POJ 2516 Minimum Cost 最小费用流

    题目: 给出n*kk的矩阵,格子a[i][k]表示第i个客户需要第k种货物a[i][k]单位. 给出m*kk的矩阵,格子b[j][k]表示第j个供应商可以提供第k种货物b[j][k]单位. 再给出k个 ...

  9. poj 1698 Alice's Chance 最大流

    题目:给出n部电影的可以在周几拍摄.总天数.期限,问能不能把n部电影接下来. 分析: 对于每部电影连上源点,流量为总天数. 对于每一天建立一个点,连上汇点,流量为为1. 对于每部电影,如果可以在该天拍 ...

  10. 转:基于TLS1.3的微信安全通信协议mmtls介绍

    转自: https://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&mid=2649286266&idx=1&sn=f5d049033e ...