文档章节

Distinct()与lambda? - Distinct() with lambda?

 法国红酒甜
发布于 07/06 02:50
字数 610
阅读 60
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

问题:

Right, so I have an enumerable and wish to get distinct values from it. 是的,所以我有一个可枚举的,并希望从中获得不同的值。

Using System.Linq , there's of course an extension method called Distinct . 使用System.Linq ,当然有一个名为Distinct的扩展方法。 In the simple case, it can be used with no parameters, like: 在简单的情况下,它可以在没有参数的情况下使用,例如:

var distinctValues = myStringList.Distinct();

Well and good, but if I have an enumerable of objects for which I need to specify equality, the only available overload is: 好的,但如果我有一个可以指定相等性的可枚举对象,唯一可用的重载是:

var distinctValues = myCustomerList.Distinct(someEqualityComparer);

The equality comparer argument must be an instance of IEqualityComparer<T> . equality comparer参数必须是IEqualityComparer<T>的实例。 I can do this, of course, but it's somewhat verbose and, well, cludgy. 当然,我可以做到这一点,但它有点冗长,而且很有说服力。

What I would have expected is an overload that would take a lambda, say a Func<T, T, bool>: 我所期望的是一个需要lambda的重载,比如Func <T,T,bool>:

var distinctValues
    = myCustomerList.Distinct((c1, c2) => c1.CustomerId == c2.CustomerId);

Anyone know if some such extension exists, or some equivalent workaround? 任何人都知道是否存在某些此类扩展或某些等效的解决方法? Or am I missing something? 或者我错过了什么?

Alternatively, is there a way of specifying an IEqualityComparer inline (embarass me)? 或者,有没有一种方法可以指定IEqualityComparer内联(embarass me)?

Update 更新

I found a reply by Anders Hejlsberg to a post in an MSDN forum on this subject. 我找到了Anders Hejlsberg对MSDN论坛中关于这个主题的帖子的回复。 He says: 他说:

The problem you're going to run into is that when two objects compare equal they must have the same GetHashCode return value (or else the hash table used internally by Distinct will not function correctly). 您将要遇到的问题是,当两个对象比较相等时,它们必须具有相同的GetHashCode返回值(否则Distinct内部使用的哈希表将无法正常运行)。 We use IEqualityComparer because it packages compatible implementations of Equals and GetHashCode into a single interface. 我们使用IEqualityComparer,因为它将Equals和GetHashCode的兼容实现打包到一个接口中。

I suppose that makes sense.. 我认为那是有道理的..


解决方案:

参考一: https://stackoom.com/question/5SDA/Distinct-与lambda
参考二: https://oldbug.net/q/5SDA/Distinct-with-lambda
粉丝 0
博文 890
码字总数 0
作品 0
成都
私信 提问
加载中
请先登录后再评论。
浏览器中的scheme解释器--SchemeScript

一个用javascript实现的scheme解释器,可以运行在浏览器中或node.js中。 刚刚看到编译原理与实践第二章,一时兴起,想写个以前就想写的scheme的解释器。昨天晚上开始写,到刚才为止,接近一天...

zoowii
2012/11/01
1.2K
0
利用java8新特性实现类似javascript callback特性

Java8的新特性之一,就是首次引入了函数式编程Lambda表达式,按oracle的说法,是为了引导java向函数式编程的方向发展。 在JDK1.8中,多了一个包,java.util.function,这里主要用到了这个包下...

Acce1erator
2015/12/02
3.5K
3
Java工程师如何在Docker上进行开发

Java工程师如何在Docker上进行开发?本文能让你以最小的日常开支和预备知识就可以把Docker和Java结合使用。 安装 现在有很多的Java Web框架,挑选一个非常小的框架,选择Spark吧!它是一款基...

dockerer
2015/12/04
8.3K
20
C++11 lambda 表达式

C++11 lambda表达式 在C++ 03标准中,并没有lambda这个概念,对于C++来说,boost库提供了lambda的接口。在C++11中,引进了lambda表达式,这也可能是面向对象语言中,比较晚引进这个概念的语...

刘大神
2015/05/25
749
2
使用Gitbook写开源书籍,过一把作家瘾

欢迎关注http://quanke.name/ 转载请注明出处,谢谢 初级(适合没有编程基础的童鞋看) 使用GitBook Editor 写开源书籍 这个是gitbook官方出的编辑器,使用简单 首先下载GitBook Editor 下载...

quanke_
2016/04/26
1.9K
3

没有更多内容

加载失败,请刷新页面

加载更多

Subversion存储库中“分支”,“标记”和“主干”的含义是什么?

问题: I've seen these words a lot around Subversion (and I guess general repository) discussions. 我已经在Subversion(我猜通用存储库)讨论中看到了很多这样的话。 I have been us......

富含淀粉
30分钟前
5
0
《Java8实战》笔记(03):Lambda表达式

本文源码 Lambda 管中窥豹 可以把Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常列表。 Lambda表达...

巨輪
32分钟前
7
0
从其他文件夹导入文件 - Importing files from different folder

问题: I have the following folder structure. 我有以下文件夹结构。 application/app/folder/file.py and I want to import some functions from file.py in another Python file which r......

javail
今天
22
0
大数据研发学习之路--Hadoop集群搭建

阅读编译文档 准备一个hadoop源码包,我选择的hadoop版本是:hadoop-2.7.7-src.tar.gz,在hadoop-2.7.7的源码 包的根目录下有一个文档叫做BUILDING.txt,这其中说明了编译hadoop所需要的一些...

DSJ-shitou
今天
8
0
OSChina 周五乱弹 —— 特么是别的公司派来的特洛伊木马吧?

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 小小编辑推荐:《我会守在这里》- 毛不易 《我会守在这里》- 毛不易 手机党少年们想听歌,请使劲儿戳(这里) @FalconChen :股市连跪了五天,...

小小编辑
今天
71
2

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部