私はすでに以下のループの例を知っています
bool[] switches = new bool[20];
for (int i = 0; i < switches.Length; i++) { switches[i] = false; }
しかし、配列全体をfalseに設定するより効率的な方法はありますか?
少し説明すると、上記の例のように、新しいbool配列をfalseに設定することはありません。私の場合、パターンの検索中に最大で18724回起動するプロセスメモリの大部分を読み取っています。現在のバイトにパターンが含まれていないと判断した場合、bool配列全体をfalseに設定し、他のいくつかの項目とともに次のメモリブロックを読み取り、ループを再開します。
好奇心からではなく、プロセス全体がまだ1秒もかからないので、この質問をしました。
繰り返しますが、私の質問は、ブール配列全体をfalseに設定するより良い方法はありますか?
default(bool)
はfalse
です。配列を作成するだけで、各要素はfalse
になります。
bool[] switches = new bool[20];
あなたが試すことができます - Array.Clear
代替として:
Array.Clear(switches, 0, switches.Length);
相対的なパフォーマンスがどうなるかはわかりませんが、奇跡を期待しないでください。
配列を再初期化できる場合、ファビアン・ビグラーの答えが正しい方法です。
ただし、true
に再初期化する場合は、 Enumerable.Repeat
:
switches = Enumerable.Repeat(true, 20).ToArray();
Bool配列全体をfalseに設定するより良い方法はありますか?
いいえ、ありません。
新しいアレイを割り当てる方が速い場合、ベンチマークすることができますが、私はそれを疑います。もちろん、これはAdam Houldsworthが指摘したように行われます。
switches = new bool[20];
ブール値のデフォルト値はfalse と考えています。ただし、健全性チェックとしては、それを反復処理することは理にかなっています。 AFAIK、それは最速の方法です
switches.Clear();
が作業を行います。 .NETの配列のサイズは固定されているため、Clear()
は要素を削除せず、代わりにすべての要素をデフォルト値に設定します(bool
の場合、これはfalse
です)