【问题标题】:How to get rid of zero value in a int slice in Go?如何摆脱 Go 中 int 切片中的零值?
【发布时间】:2019-04-21 19:54:34
【问题描述】:

我正在尝试在数字列表中查找偶数,这是我的尝试:

package main

import "fmt"

func main() {
    nums := []int{1, 2, 3, 4, 5, 6, 7}
    res := []int{}
    for n := range nums {
        if n%2 == 0 {
            res = append(res, n)
        }
    }
    fmt.Println(res)
}

看起来很简单;但是,当我运行程序时,我得到了结果

[0 2 4 6]

零从何而来?它必须来自空切片res。我怎样才能摆脱这个零?

【问题讨论】:

标签: for-loop go slice


【解决方案1】:
for n := range nums {
    // ...
}

n 不是nums 切片的元素,它是索引。所以基本上你测试了元素的索引并将其添加到你的 res 结果切片中。

改为这样做:

for _, n := range nums {
    // ...
}

通过此更改,输出将是(在Go Playground 上尝试):

[2 4 6]

这在Spec: For statements中有详细说明,对于带有范围子句的语句:

对于每次迭代,如果存在相应的迭代变量,则生成的迭代值如下:

Range expression                          1st value          2nd value

array or slice  a  [n]E, *[n]E, or []E    index    i  int    a[i]       E
string          s  string type            index    i  int    see below  rune
map             m  map[K]V                key      k  K      m[k]       V
channel         c  chan E, <-chan E       element  e  E

【讨论】:

    猜你喜欢
    • 2014-08-24
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    • 2022-12-17
    相关资源
    最近更新 更多