dsdxlibt98300 2018-11-19 12:43
浏览 168
已采纳

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

I am trying to find even numbers in a list of numbers, here is my attempt:

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)
}

It seems straightforward; however, when I run the program, I got the result

[0 2 4 6]

Where does the zero come from? It must be from the empty slice res. How can I get rid of this zero?

  • 写回答

1条回答 默认 最新

  • douyan1453 2018-11-19 12:45
    关注
    for n := range nums {
        // ...
    }
    

    n is not the elements of the nums slice, it is the index. So basically you tested and added the indices of the elements to your res result slice.

    Instead do this:

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

    With this change, output will be (try it on the Go Playground):

    [2 4 6]
    

    This is detailed in Spec: For statements, For statements with range clause:

    For each iteration, iteration values are produced as follows if the respective iteration variables are present:

    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
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。