如何在Go中不使用for循环来初始化数组?

问题描述:

我有一个布尔值的数组A,索引整数0n,所有初始设置为true如何在Go中不使用for循环来初始化数组?

我目前的实现是:

for i := 0; i < n; i++ { 
    A[i] = true 
} 
+1

只是出于好奇:你为什么要避免for循环? – Volker

+0

减少执行时间。 – abado

+0

这不起作用。 – Volker

使用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没有应该是一个内置函数,但是对于一个有效的解决方案见这样的问题:使用范围功能不知道数组中元素的数目

Is there analog of memset in go?

制作动初始化。

for i,_:=range(A){A[i] = true} 
+1

for i:= range A [A [i] = true} –