在C#中的两个列表之间获取不同的列表

kar*_*tal 15 c# list distinct-values set-difference

我有两个字符串列表.如何获取它们之间的不同值列表或从第一个列表中删除第二个列表元素?

List<string> list1 = { "see","you","live"}

List<string> list2 = { "see"}
Run Code Online (Sandbox Code Playgroud)

结果应该是{"you","live"}.

Jus*_*ner 40

在我看来,你需要Enumerable.Except():

var differences = list1.Except(list2);
Run Code Online (Sandbox Code Playgroud)

然后你可以循环分歧:

foreach(var difference in differences)
{
    // work with each individual string here.
}
Run Code Online (Sandbox Code Playgroud)

  • @salamonti - var 关键字只是一个快捷方式。在这种情况下,它将是一个可以迭代的 IEnumerable&lt;string&gt; 。 (3认同)

svi*_*ick 8

如果您想从第一个列表中获取除第二个列表中的项目之外的项目,请使用

list1.Except(list2)
Run Code Online (Sandbox Code Playgroud)

如果您想获取第一个列表或第二个列表中的项目,而不是两者,您可以使用

list1.Except(list2).Concat(list2.Except(list1))
Run Code Online (Sandbox Code Playgroud)

  • 如果有人来这里是为了“在第一个列表或第二个列表中的项目,但不是两者”,你可以简单地使用 `list1.Union(list2)` (2认同)

小智 6

这是我发现独特的好方法......

两个列表中唯一的

        var A = new List<int>() { 1,2,3,4 };
        var B = new List<int>() { 1, 5, 6, 7 };

       var a= A.Except(B).ToList();
        // outputs List<int>(2) { 2,3,4 }
       var b= B.Except(A).ToList();
        // outputs List<int>(2) { 5,6,7 }
       var abint=  B.Intersect(A).ToList();
        // outputs List<int>(2) { 1 }
Run Code Online (Sandbox Code Playgroud)