我有一個布爾值的數組A
,索引整數0
至n
,所有初始設置爲true
。如何在Go中不使用for循環來初始化數組?
我目前的實現是:
for i := 0; i < n; i++ {
A[i] = true
}
我有一個布爾值的數組A
,索引整數0
至n
,所有初始設置爲true
。如何在Go中不使用for循環來初始化數組?
我目前的實現是:
for i := 0; i < n; i++ {
A[i] = true
}
使用for
循環是最簡單的解決方案。創建一個數組或切片將始終返回一個歸零值。在bool
的情況下意味着所有值將是false
(類型bool
的零值)。
注意使用Composite literal您可以創建和初始化片或陣列,但不會是任何更短:
b1 := []bool{true, true, true}
b2 := [3]bool{true, true, true}
如果你不想使用for
循環,可以使它矮一點通過引入一個恆定的值true
:
const T = true
b3 := []bool{T, T, T}
如果n
大,for
是最簡單的解決方案。或者你可以切換應用程序的邏輯,並使用數組或切片將切片中的取反值存儲起來,這樣零值就是一個很好的初始值。我的意思是,如果你的片是存儲文件是否爲目前,你可以改變的邏輯,這樣的片存儲文件是否缺少:
presents := []bool{true, true, true, true, true, true}
// Is equivalent to:
missings := make([]bool, 6) // All false
// missing=false means not missing, means present)
還要注意的是填充數組或切片用一個特定的值被稱爲「memset」操作。 Go沒有應該是一個內置函數,但是對於一個有效的解決方案見這樣的問題:使用範圍功能不知道數組中元素的數目
製作動初始化。
for i,_:=range(A){A[i] = true}
for i:= range A [A [i] = true} –
只是出於好奇:你爲什麼要避免for循環? – Volker
減少執行時間。 – abado
這不起作用。 – Volker