私は2つを持っています
List<string>
l1 = {"one", "two","three","four"}
l2 = {"one", "three"}
l2 のすべてが bool として l1 内にあるかどうかを知りたいですか?
var allIn = !l2.Except(l1).Any();
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)
どうぞ
bool b = l2.All( s => l1.Contains(s));