如何在Go中不使用for循环的情况下初始化数组?

I have an array A of boolean values, indexed by integers 0 to n, all initially set to true.

My current implementation is :

for i := 0; i < n; i++ {
    A[i] = true
}
duanqiao0153
duanqiao0153 这行不通。
大约 5 年之前 回复
douxiaochun4964
douxiaochun4964 减少执行时间。
大约 5 年之前 回复
douqiang4245
douqiang4245 出于好奇:您为什么要避免for循环?
大约 5 年之前 回复

2个回答



使用 for </ code>循环是最简单的解决方案。 创建数组或切片将始终为您返回零值。 在 bool </ code>的情况下,这意味着所有值均为 false </ code>(类型为 bool </ code>的零值)。</ p>

< p>请注意,使用复合文字,您可以创建和初始化切片或数组,但是 不会再短:</ p>

  b1:= [] bool {true,true,true} 
b2:= [3] bool {true,true,true} \ n </ code> </ pre>

如果不想使用 for </ code>循环,可以通过为值< code> true </ code>:</ p>

  const T = true 
b3:= [] bool {T,T,T}
</ code> </ pre>

如果 n </ code>大,则 for </ code>是最简单的解决方案。</ p>

或者您可以切换逻辑 您的应用程序,并使用数组或切片将否定的值存储在切片中,这样,“ all-false” </ em>零值将是一个很好的初始值。 我的意思是,如果您的分片要存储文件是存在</ em>,则可以更改逻辑,以便分片存储文件是否是文件 missing </ em>:</ p>

 表示:= [] bool {true,true,true,true,true,true,true} 

//等效于:

missings:= make([] bool,6 )//所有false
// missing = false表示不丢失,表示存在)
</ code> </ pre>

也请注意,用特定值填充数组或切片是已知的 作为“记忆集”操作。 Go没有内置功能,但是要获得有效的解决方案,请参见以下问题:</ p>

中是否有类似的memset? </ p>
</ div>

展开原文

原文

Using a for loop is the simplest solution. Creating an array or slice will always return you a zeroed value. Which in case of bool means all values will be false (the zero value of type bool).

Note that using a Composite literal you can create and initialize a slice or array, but that won't be any shorter:

b1 := []bool{true, true, true}
b2 := [3]bool{true, true, true}

If you don't want to use a for loop, you can make it a little shorter by introducing a constant for the value true:

const T = true
b3 := []bool{T, T, T}

If n is big, for is the simplest solution.

Or you could switch the logic of your application, and use the array or slice to store the negated values in the slice, and that way the "all-false" zero value would be a good initial value. What I mean is that if your slice is to store if files are present, you could change the logic so the slice stores whether files are missing:

presents := []bool{true, true, true, true, true, true}

// Is equivalent to:

missings := make([]bool, 6) // All false
// missing=false means not missing, means present)

Also note that filling an array or slice with a specific value is known as a "memset" operation. Go does not have a builtin function for that, but for an efficient solution see this question:

Is there analog of memset in go?



使用范围函数进行初始化,而无需知道数组中元素的数量。</ p>

 对于i,_:= range(A){A [i] = true} 
</ code> </ pre>
</ div>

展开原文

原文

Make initilization using range function without knowing the number of elements in the array.

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

doudang4857
doudang4857 对于i:=范围A [A [i] = true}
大约 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐