For ループを使用せずに Go で配列を初期化する
Go で配列を操作する場合、多くの場合、値を初期化する必要があります。最も簡単な方法は、次の例に示すように、for ループを使用することです。
<code class="go">for i := 0; i < n; i++ { A[i] = true }</code>
ただし、このアプローチは、大きな配列の場合は退屈になる可能性があります。幸いなことに、利用可能な代替手段がいくつかあります。
複合リテラル
複合リテラルを使用すると、より簡潔な方法で配列とスライスを作成および初期化できます。
<code class="go">b1 := []bool{true, true, true} b2 := [3]bool{true, true, true}</code>
複合リテラルは常に配列を指定された型のゼロ値に初期化することに注意してください。 bool の場合、これはすべての値が false になることを意味します。
定数の使用
すべての要素を特定の値 (例: true) に初期化する場合)、定数を導入して複合リテラルで使用できます。
<code class="go">const T = true b3 := []bool{T, T, T}</code>
Alternative Logic
特定の状況では、配列内の目的の値の逆数。これにより、デフォルトのゼロ化された配列の動作を利用できるようになります。
<code class="go">presents := []bool{true, true, true, true, true, true} // Equivalent to: missings := make([]bool, 6) // All false (not missing)</code>
効率的な "memset" 操作
パフォーマンスが重要な場合は、次の使用を検討できます。 memset 操作の実装:
<code class="go">import ( "bytes" "unsafe" ) func memset(p []interface{}, v interface{}) { b := bytes.NewBuffer(make([]byte, unsafe.Sizeof(v))) b.Reset() for i := range p { b.Write(b.Bytes()) copy(p[i:i+1], *(*[]byte)(unsafe.Pointer(&v))) } }</code>
このアプローチは、大きな配列の場合に特に効率的です。
以上がGo で for ループを使用せずに配列を初期化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。