私は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 つのハッシュ テーブルを作成します。ハッシュ テーブルの作成はそれぞれおよびです。次に、アイテムごとに、そのアイテムがハッシュ テーブルにあるかどうかを確認します。つまり、償却されます。したがって、総費用はです。l1
l2
m
l1
n
l2
m
n
O(m * n)
O(1)
O(m)
O(n)
n
O(n)
O(m + n)
どうぞ
bool b = l2.All( s => l1.Contains(s));