【发布时间】:2017-02-03 10:15:25
【问题描述】:
运行下面的代码时,我希望看到数字 3,两次,但显然 except() 方法只返回一次相同的元素。
List<int> x = new List<int>() {1, 2, 3, 3};
List<int> y = new List<int>() { 1, 2 };
var z = x.Except(y); /* returns 3, only once */
在文档中,他们说两个集合的集合差异被定义为第一个集合中没有出现在第二个集合中的成员。没有记录他们只返回一次重复的项目。 https://msdn.microsoft.com/en-us/library/bb300779(v=vs.110).aspx
这是一个错误,还是我在这里遗漏了什么?
Expect() 方法的代码在这里:https://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,e289e6c98881b2b8。
他们不应该做“if (!set.Contains(element)) yield return element;”吗?而不是“if (set.Add(element)) yield return element;”?
【问题讨论】:
-
set的定义意味着它不包含重复项,因此这是按预期工作的。 -
示例中只包含一次“2.3”?
-
@xanatos - 您链接的页面似乎只有第一个可枚举项中的唯一项 (
double[] numbers1 = { 2.0, 2.1, 2.2, 2.3, 2.4, 2.5 };) -
@Corak Aaaaah... 意大利语版本(即自动翻译的msdn.microsoft.com/it-it/library/bb300779(v=vs.110).aspx)具有
2.3, 2.3示例...然后他们可能更正了它,但页面没有更新。 ..