在沒有 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>
替代邏輯
在某些情況下,儲存常數可能會更有效數組中所需值的倒數。這允許您利用預設的歸零數組行為:
<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>
這種方法對於大型陣列特別有效。
以上是如何在不使用 for 迴圈的情況下初始化 Go 中的陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!