确定字符串列表是否在另一个字符串列表中

时间:2013-07-31 20:31:52

标签: c# linq

我有两个

List<string>

l1 = {"one", "two","three","four"}
l2 = {"one", "three"}

我想知道l2中的所有l2是否都在l1中作为bool?

3 个答案:

答案 0 :(得分:10)

var allIn = !l2.Except(l1).Any();

答案 1 :(得分:9)

使用Enumerable.Except

var contained = !l2.Except(l1).Any();

请注意,有几个人提出了以下建议:

var contained = l2.All(x => l1.Contains(x));

让我解释为什么是最好的解决方案,应该可以避免。

主要原因是因为速度较慢。它的速度较慢,因为对于l2中的每个项目,它会通过l1执行线性扫描,一遍又一遍地查找{em> l2中的每个项目}。设ml1的长度,nl2的长度。这是对m个项目的扫描,完成n次。因此,总费用为O(m * n)。替代方案将构建两个具有O(1)摊销查找的哈希表。构建哈希表分别是O(m)O(n)。然后,对于每个n项,检查项是否在哈希表中。这是O(n),摊销。因此,总费用为O(m + n)

答案 2 :(得分:-1)

你去吧

 bool b = l2.All( s => l1.Contains(s));