-8

我有两个

List<string>

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

我想知道所有 l2 是否都在 l1 作为布尔值?

4

3 回答 3

10
var allIn = !l2.Except(l1).Any();
于 2013-07-31T20:33:16.907 回答
9

使用Enumerable.Except

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

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

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

让我解释一下为什么这不是最好的解决方案,应该避免。

主要原因是因为它比较慢。它比较慢,因为对于 中的每个项目l2,它都会对 中的每个项目进行一次又一次的线性扫描。设为 的长度,为的长度。所以这是对项目的扫描,完成时间。因此,总成本为。另一种方法是使用分摊查找构建两个哈希表。分别构建哈希表。然后,对于每个项目,检查该项目是否在哈希表中。也就是摊销。因此,总成本为。l1l2ml1nl2mnO(m * n)O(1)O(m)O(n)nO(n)O(m + n)

于 2013-07-31T20:33:12.917 回答
-1

干得好

 bool b = l2.All( s => l1.Contains(s));
于 2013-07-31T20:34:14.660 回答