提供者: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. 开发工具 之 PowerDesigner

    PowerDesigner是一款功能非常强大的建模工具软件,足以与Rose比肩,同样是当今最著名的建模软件之一.Rose是专攻UML对象模型的建模工具,之后才向数据库建模发展,而PowerDesign ...

  2. 编译器失败,错误代码为xxx

    问题:出现编译器失败,等一会儿出现csc.exe无响应,错误代码不一定是255,是其他的也可以试试 解决办法: 查看是否类似360之类的杀毒软件运行着,如果运行着,关掉然后重新试一下,应该就没有问题了 ...

  3. postgres数据库中的数据转换

    postgres8.3以后,字段数据之间的默认转换取消了.如果需要进行数据变换的话,在postgres数据库中,我们可以用"::"来进行字段数据的类型转换.实际上"::& ...

  4. 1.4.6 其他Schema元素

    这里描述了schema.xml中的其他几个重要的元素. 唯一主键-Unique Key uniqueKey元素一篇文档的唯一标记,它几乎总是保证您的应用程序设计,例如,如果你更新索引中的文档,需要用到 ...

  5. 使用 sp_executesql

    建议您在执行字符串时,使用 sp_executesql 存储过程而不要使用 EXECUTE 语句.由于此存储过程支持参数替换,因此 sp_executesql 比 EXECUTE 的功能更多:由于 S ...

  6. [Java,JavaEE] 最常用的Java库一览

    引用自:http://www.importnew.com/7530.html 本文由 ImportNew - 邢 敏 翻译自 programcreek.欢迎加入Java小组.转载请参见文章末尾的要求. ...

  7. MVC框架 - 异常处理

    在ASP.NET中,错误处理是通过使用标准的尝试捕捉方法或使用应用程序事件.ASP.NET MVC附带内置支持,被称为异常过滤器功能异常处理.在这里我们要学习两种方法:一个是定义HandleError ...

  8. Hadoop学习笔记(3)——分布式环境搭建

    Hadoop学习笔记(3) ——分布式环境搭建 前面,我们已经在单机上把Hadoop运行起来了,但我们知道Hadoop支持分布式的,而它的优点就是在分布上突出的,所以我们得搭个环境模拟一下. 在这里, ...

  9. SQL Server中游标的使用

    举个栗子: -- 临时变量 DECLARE @Id UNIQUEIDENTIFIER -- 声明游标名 DECLARE cursor_name CURSOR FOR SELECT ID from CO ...

  10. oracle数据操纵语言(DML)data manipulation language(续集)

    SQL查询语句(SELECT)进阶分组函数(Group Functions):对多行进行操作,并为每一组给出一个结果. AVG([DISTINCT|ALL] expression) 平均值COUNT ...