使用LINQ检查一个List<string>是否包含另一个List<string>中的元素

15

如何使用C#中的LINQ检查列表是否包含在另一个列表中存在的元素?我不想使用for / while循环。

因此,如果List1具有A、B、C,而List2具有B、1、2,则会返回true。

2个回答

36

试试这个:

List<string> a = ...
List<string> b = ...
var inComon = a.Intersect(b).Any();

14

使用Enumerable.Any 方法

List<string> l1 = new List<string> { "1", "2" };
List<string> l2 = new List<string> { "1", "3" };
var result = l2.Any(s => l1.Contains(s));

我认为Intersect方法(参见 dasblinkenlight 的答案)+ Any要比Contains + Any更好。使用Any而不是Count肯定更好。


2
你甚至可以使用 l1.Any(l2.Contains) 让它更加简洁。 - SimpleVar
感谢出色的建议,Any 肯定比 Count() != 0 更好! - Sergey Kalinichenko
@dasblinkenlight,我给你点赞,因为“Intersect”真的很好用...其实一开始我都忘了它的存在...但现在我更喜欢它了。 - horgh
我有一个句子列表。我有一个包含特定单词的数组。如果句子中至少有一个单词来自该数组,我想要列表的索引。 - kirushan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接