【问题标题】:C# Enumerable.Except() only returns the same element once [duplicate]C# Enumerable.Except() 只返回一次相同的元素[重复]
【发布时间】: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 示例...然后他们可能更正了它,但页面没有更新。 ..

标签: c# linq


【解决方案1】:

显然,这不是错误; set difference 这里意味着两个序列都被视为集合,因此结果序列中的每个元素只包含一次。但是,documentation 并没有真正放大输出中是否可以出现双精度数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 2020-05-25
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多