1

文字列の配列を与えることで、配列内の各要素が事前定義された文字列の配列に含まれているかどうかをテストしたいと思います。

例えば:

var a = new[] { "test1", "test2" };

var b = new[] { "test1", "test4" };

var c = new[] { "test1", "test3", "test1", "test3" };

var predefined = new[] { "test1", "test2", "test3" };

変数 a と c は true を返し、b は false を返します。

C# コードの最も効率的な方法は何ですか?

4

2 に答える 2

7

注文は重要ですか?そうでない場合は、LINQ を使用します。

if (!a.Except(predefined).Any())
{
    // predefined contains every element of a
    // (Way to read this: there is no element of a which isn't also in predefined)
}

O(N * M) であるAll...ソリューションとは対照的に、それは一般的に O(N + M) になります。もちろん、それは絶対的なパフォーマンスを示すものでContainsはありません。小さなコレクションを使用している場合、実際には...の方が高速な場合があります。関連するコレクションが大きくなるにつれて、これはより高速になる可能性が高くなります。AllContains

編集:コメントに記載されているように、HashSet<T>fromを作成しpredefinedて再利用できる場合は、より効率的になります...そして実際にははるかに読みやすくなります:

var predefinedSet = new HashSet<string>(predefined);
...

if (predefinedSet.IsSupersetOf(a))
{
    ...
}
于 2013-03-15T17:21:26.733 に答える
2

最も効率的であるが、最も読みやすく標準的なコードであるかどうかはわかりません

arrayToCheck.All(a => predefined.Contains(a))
于 2013-03-15T17:21:20.800 に答える