如何比较一个列表以另一个列表开头的两个列表,并仅返回“悬垂”元素?

时间:2017-01-17 23:41:10

标签: c# .net linq

我有两个List<string>

清单1:

snap
crackle

清单2:

snap
crackle
pop
bang

列表2 总是以与列表1相同的元素开头,但总是有一些额外的元素“悬挂在最后”。我想返回这些“悬垂元素”的列表。

所以在上面的例子中,我想要一个列表:

pop
bang

是否有LINQ运算符执行此操作?

2 个答案:

答案 0 :(得分:1)

您可以使用Except扩展方法:

var list1 = new List<string> { "snap", "crackle" };
var list2 = new List<string> { "snap", "crackle", "pop", "bang" };
var result = list2.Except(list1).ToList();

Ivan Stoev指出,上述解决方案将产生设定差异。如果您想要列表差异,并且第二个列表始终包含开头第一个列表中的元素,您可以使用此解决方案:

var result = list2.Skip(list1.Count).ToList();

.NET Fiddle上运行此示例。

答案 1 :(得分:1)

您可以使用Except() linq方法执行此操作:

var onlyIn2 = list2.Except(list1);