如何在Go中不使用for循环来初始化数组?
问题描述:
我有一个布尔值的数组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}
+1
for i:= range A [A [i] = true} –
只是出于好奇:你为什么要避免for循环? – Volker
减少执行时间。 – abado
这不起作用。 – Volker