-8

私は2つを持っています

List<string>

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

l2 のすべてが bool として 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線形スキャンするため、処理が遅くなります。の長さをとし、 の長さを とします。これはアイテムのスキャンであり、完了した回数です。したがって、総費用はです。別の方法では、償却されたルックアップを使用して 2 つのハッシュ テーブルを作成します。ハッシュ テーブルの作成はそれぞれおよびです。次に、アイテムごとに、そのアイテムがハッシュ テーブルにあるかどうかを確認します。つまり、償却されます。したがって、総費用はです。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 に答える