我有两个
List<string>
l1 = {"one", "two","three","four"}
l2 = {"one", "three"}
我想知道l2中的所有l2是否都在l1中作为bool?
答案 0 :(得分:10)
var allIn = !l2.Except(l1).Any();
答案 1 :(得分:9)
var contained = !l2.Except(l1).Any();
请注意,有几个人提出了以下建议:
var contained = l2.All(x => l1.Contains(x));
让我解释为什么不是最好的解决方案,应该可以避免。
主要原因是因为速度较慢。它的速度较慢,因为对于l2
中的每个项目,它会通过l1
执行线性扫描,一遍又一遍地查找{em> l2
中的每个项目}。设m
为l1
的长度,n
为l2
的长度。这是对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));