【问题标题】:How do I initialize an array without using a for loop in Go?如何在 Go 中不使用 for 循环初始化数组?
【发布时间】:2015-12-23 11:18:55
【问题描述】:

我有一个布尔值数组A,由整数索引0n,最初都设置为true

我目前的实现是:

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

【问题讨论】:

  • 只是出于好奇:为什么要避免 for 循环?
  • 减少执行时间。

标签: arrays go initialization slice


【解决方案1】:

使用for 循环是最简单的解决方案。创建数组或切片将始终返回一个零值。在bool 的情况下,意味着所有值都是falsebool 类型的零值)。

请注意,使用 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 是最简单的解决方案。

或者您可以切换应用程序的逻辑,并使用数组或切片将否定值存储在切片中,这样 "all-false" 零值将是一个不错的选择初始值。我的意思是,如果您的切片要存储文件是否存在,您可以更改逻辑,以便切片存储文件是否缺失

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?

【讨论】:

    【解决方案2】:

    在不知道数组元素个数的情况下使用 range 函数进行初始化。

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

    【讨论】:

    • for i := range A [ A[i] = true }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多