【问题标题】:Remove duplicates from list of string and also remove the key value从字符串列表中删除重复项并删除键值
【发布时间】:2019-05-17 01:10:14
【问题描述】:

我希望从我拥有的字符串列表中删除重复的项目。 我有 2 个文本文件。一个是我所有的结果,另一个是完成的结果。

我希望从包含我所有结果的文件中删除完成的结果。到目前为止,我已经尝试过 distinct 函数,但这也总是会留下一个不重复的字符串。

有没有办法为此使用 distinct 功能并删除重复的项目?

【问题讨论】:

  • 您好,欢迎来到 Stack Overflow。在这里正确提问非常重要。看看How to Askminimal reproducible example。该站点是针对有关现有代码的特定问题的问题。就目前而言,你的问题是题外话,因为你没有解释你得到什么行为,你得到什么错误以及它们发生在哪一行。不要让反对票或关闭投票让你失望​​。谢谢

标签: vb.net filtering


【解决方案1】:

听起来你想要Except 函数:

Dim results = {"a", "a", "b", "c", "d", "d"}
Dim finished = {"a", "c"}

Dim remainder = results.Except(finished)

Console.WriteLine(String.Join(", ", remainder))

输出:

b, d

除非您想保留两个“d”。

【讨论】:

    【解决方案2】:

    您在字符串类中使用.RemoveAll 函数,其中接受一个函数并删除给定条件的所有匹配项,如下所示。

    var x = new List<string>() { "a", "a", "b", "c" };
    x.RemoveAll(a => string.Equals(a, "a"));
    

    此代码删除列表中a 的两个实例。

    或者你们中的某个人有一个要删除的集合:

    var collToRemove = new List<string>() { "a" };
    x.RemoveAll(a => collToRemove.Contains(a));
    

    【讨论】:

    • 在这种情况下,“a”只是 1 个字符串。假设我有 100 万条结果要检查。我可以用 for each 循环遍历它,但这会比另一种方法更有效吗?
    • 如果您有一个要匹配的集合,您只需将string.Equals 更改为coll.Contains(a)
    • 这是一个 vb.net 问题,不是 C#。
    猜你喜欢
    • 2013-08-20
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 2023-01-09
    • 1970-01-01
    相关资源
    最近更新 更多