为了账号安全,请及时绑定邮箱和手机立即绑定

如何摆脱 Go 中 int 切片中的零值?

如何摆脱 Go 中 int 切片中的零值?

Go
手掌心 2023-05-08 17:54:12
我试图在数字列表中找到偶数,这是我的尝试:package mainimport "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]零从何而来?它必须来自空 slice res。我怎样才能摆脱这个零?
查看完整描述

1 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

for n := range nums {

    // ...

}

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


而是这样做:


for _, n := range nums {

    // ...

}

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

[2 4 6]

这在Spec: For statements , For statements with range clause 中有详细说明:

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

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


查看完整回答
反对 回复 2023-05-08
  • 1 回答
  • 0 关注
  • 77 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信