17

C# で bool 型のリストがある場合。リストに真の値が含まれているかどうかを判断する最速の方法は何ですか? 真の値がいくつ、またはどこにあるかを知る必要はありません。存在するかどうかを知る必要があります。非常に大きなリストを多数検索します。

4

8 に答える 8

11

list.Contains(true) または list.Any(true) のいずれかを使用します。通常のリストの場合、両方とも複雑さ O(n) があります。ただし、Any() はデリゲートを呼び出す必要がある拡張メソッドであるため、Contains() の方が少し速いかもしれません。しかし、確かに、大規模なコレクションで両方をテストするだけです。

于 2013-04-17T12:07:50.257 に答える
1

この回答は、これについて別の角度から提供します:なぜブール値をリストに保存するのですか? それらを 2 つの int として保存しますint falseCount; int trueCount;

包含テストは次のように簡単です。trueCount > 0

リストが必要だと仮定するとList.Contains、基になる配列を直接検索するので使用します。

リフレクションを使用して基になる配列を抽出し、ハードコーディングされた比較ループで検索すると、さらに高速になります。そこでリテラルを使用して、true各要素を比較できます。ループを展開したり、安全でないコードのトリックを実行したりすることもできます。

于 2013-04-17T12:35:28.370 に答える