Как избавиться от нулевого значения в int срезе в Go? - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь найти четные числа в списке чисел, вот моя попытка:

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.Как я могу избавиться от этого нуля?

1 Ответ

0 голосов
/ 19 ноября 2018
for n := range nums {
    // ...
}

n - это не элементы среза nums, это index . В общем, вы протестировали и добавили индексы элементов к вашему res результирующему срезу.

Вместо этого сделайте это:

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

С этим изменением вывод будет (попробуйте на Go Playground ):

[2 4 6]

Это подробно описано в Спецификация: Для операторов , Для операторов с предложением диапазона:

Для каждой итерации значения итерации создаются следующим образом, если присутствуют соответствующие переменные итерации:

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
...