web-dev-qa-db-ja.com

bool []全体をfalseに設定

私はすでに以下のループの例を知っています

bool[] switches = new bool[20];
for (int i = 0; i < switches.Length; i++) { switches[i] = false; }

しかし、配列全体をfalseに設定するより効率的な方法はありますか?

少し説明すると、上記の例のように、新しいbool配列をfalseに設定することはありません。私の場合、パターンの検索中に最大で18724回起動するプロセスメモリの大部分を読み取っています。現在のバイトにパターンが含まれていないと判断した場合、bool配列全体をfalseに設定し、他のいくつかの項目とともに次のメモリブロックを読み取り、ループを再開します。

好奇心からではなく、プロセス全体がまだ1秒もかからないので、この質問をしました。

繰り返しますが、私の質問は、ブール配列全体をfalseに設定するより良い方法はありますか?

20
JMC17

default(bool)falseです。配列を作成するだけで、各要素はfalseになります。

bool[] switches = new bool[20];
44
Felipe Oriani

あなたが試すことができます - Array.Clear 代替として:

Array.Clear(switches, 0, switches.Length);

相対的なパフォーマンスがどうなるかはわかりませんが、奇跡を期待しないでください。

9
Jon

配列を再初期化できる場合、ファビアン・ビグラーの答えが正しい方法です。

ただし、trueに再初期化する場合は、 Enumerable.Repeat

switches = Enumerable.Repeat(true, 20).ToArray();
6
Sinatr

Bool配列全体をfalseに設定するより良い方法はありますか?

いいえ、ありません。

新しいアレイを割り当てる方が速い場合、ベンチマークすることができますが、私はそれを疑います。もちろん、これはAdam Houldsworthが指摘したように行われます。

switches = new bool[20];
2
Fabian Bigler

ブール値のデフォルト値はfalse と考えています。ただし、健全性チェックとしては、それを反復処理することは理にかなっています。 AFAIK、それは最速の方法です

参照: 単一の値でC#配列を移植/インスタンス化する方法?

2
Daniel Kotin

switches.Clear();が作業を行います。 .NETの配列のサイズは固定されているため、Clear()は要素を削除せず、代わりにすべての要素をデフォルト値に設定します(boolの場合、これはfalseです)

1
nativehr