Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 确定字符串列表是否在另一个字符串列表中_C#_Linq - Fatal编程技术网

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

C# 确定字符串列表是否在另一个字符串列表中,c#,linq,C#,Linq,我有两个 List<string> l1 = {"one", "two","three","four"} l2 = {"one", "three"} 我想知道l2是否都在l1内作为布尔?使用: 请注意,有几个人提出了以下建议: var contained = l2.All(x => l1.Contains(x)); 让我解释一下为什么这不是最好的解决办法,应该避免 主要原因是速度较慢。它的速度较慢,因为对于l2中的每个项目,它都会对l1进行线性扫描,对l2中的每个项目进行

我有两个

List<string>

l1 = {"one", "two","three","four"}
l2 = {"one", "three"}
我想知道l2是否都在l1内作为布尔?

使用:

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

var contained = l2.All(x => l1.Contains(x));
让我解释一下为什么这不是最好的解决办法,应该避免

主要原因是速度较慢。它的速度较慢,因为对于l2中的每个项目,它都会对l1进行线性扫描,对l2中的每个项目进行一次又一次的扫描。设m为l1的长度,n为l2的长度。这是对m个项目的扫描,做了n次。因此,总成本为Om*n。另一种方法是使用O1分期查找构建两个哈希表。构建哈希表分别是Om和On。然后,对于n个项目中的每一个,检查该项目是否在哈希表中。就这样,分期付款。因此,总成本为Om+n

给你

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

成吨的复制品。。。这不是一个问题。这是一个请求。到目前为止,你尝试了什么?@jason的可能重复这是一个问得不好的问题,没有努力找到解决方案,很可能是重复。但你是对的,它是关于主题的。这将比其他选择慢。也就是说,它类似于Om*n或其他东西,而不是Om+n,这里m和n是列表的长度。@Jason:也许这是真的。为什么不解释一下它为什么慢?这很有启发性。@stakx:看我的,我在回复中编辑过。
var allIn = !l2.Except(l1).Any();
 bool b = l2.All( s => l1.Contains(s));