【问题标题】:List.Except returns only 1 item when there are several in the diff set当差异集中有多个项目时,List.Except 仅返回 1 个项目
【发布时间】:2014-09-15 08:25:25
【问题描述】:

在 C# 中,试图在两个字符串列表之间进行例外。有一些差异,请参见下图。在 idx 2 和 19 注意这些是不一样的。然而 List.Except 方法只返回最后一个差异。

我这样称呼它:var x = expList.Except(actList);

在结果中返回 1 项:“site”。

我希望有 2 个项目:4001,“站点”

有人对这里发生的事情有任何想法吗?

谢谢!

【问题讨论】:

  • 您没有显示所有项目(请注意,索引从 9->19 跳转)-“4001”也必须存在于第一个列表中。
  • 索引 10 到 18 发生了什么?
  • 看看HashSet.SymmetricExceptWith()
  • 完美!这就是我需要的。谢谢PeteGO。

标签: c# list except


【解决方案1】:

正如 Alexei Levenkov 所说,Enumerable.Except 不是“对称差异”。

考虑:

new HashSet<string>(expList).SymmetricExceptWith(actList);

【讨论】:

    【解决方案2】:

    Enumerable.Except 不是“对称差”(见http://en.wikipedia.org/wiki/Set_theory),它是“设置差”:

    第一个集合中没有出现在第二个集合中的成员。

    因此,如果您的第一个列表是{4002},第二个列表是{ 4001},则Except 的结果将不包含4001

    您可能正在寻找:Get the symmetric difference from generic lists

    【讨论】:

    • 啊,那是我的错。我认为这是一个对称的差异。我想没有可用的 Symm Diff 方法?
    猜你喜欢
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    相关资源
    最近更新 更多