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

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


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]

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


手掌心
浏览 81回答 1
1回答

翻翻过去那场雪

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 valuearray or slice  a  [n]E, *[n]E, or []E    index    i  int    a[i]       Estring          s  string type            index    i  int    see below  runemap             m  map[K]V                key      k  K      m[k]       Vchannel         c  chan E, <-chan E       element  e  E
打开App,查看更多内容
随时随地看视频慕课网APP