Как вы l oop через 2D-массив с циклами for - PullRequest
0 голосов
/ 06 мая 2020
package main

import (
    "fmt"
)

func main() {
    grid := [][]int{
        {0, 1, 2, 3},
        {4, 5, 6, 7},
    }
    for _, array := range grid[0] {
        for j := range array {
            fmt.Print(array[j], " ")
        }
        fmt.Println()

    }
}

Это то, что у меня есть сейчас, и я пытаюсь пройти по каждому столбцу, но получаю ошибку компиляции ниже

./prog.go:13:12: cannot range over array (type int)

grid is [] [] int array. Я пытаюсь установить массив для каждого столбца и пройти по столбцу.

PlayGround

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Ваш диапазон l oop отлично подходит . Единственная проблема в том, что если вы используете два цикла для 2D-массива, то зачем вам использовать grid [0] во внешнем l oop, просто используйте сетку это будет работать

Ваш обновленный рабочий код

package main

import (
    "fmt"
)

func main() {
    grid := [][]int{
        {0, 1, 2, 3},
        {4, 5, 6, 7},
    }
    for _, array := range grid {
        for j := range array {
            fmt.Print(array[j], " ")
        }
        fmt.Println()

    }
}

Пример выполнения - https://play.golang.org/p/NIkhFOqyF6g

Это выдает ошибку, потому что когда вы передаете grid [0] внешнему l oop, он передаст целочисленное значение во внутреннем l oop, и это даст ошибку не может перемещаться по массиву (тип int)

1 голос
/ 06 мая 2020

Кажется, что вам не хватает одного имени переменной во внутреннем range.

From https://tour.golang.org/moretypes/16:

При ранжировании по срезу для каждой итерации возвращаются два значения. Первый - это индекс, а второй - копия элемента по этому индексу.

В приведенном ниже коде есть исправление (запускаемый пример: https://play.golang.org/p/6uaM2IEm9lR)

package main

import (
    "fmt"
)

func main() {
    grid := [][]int{
        {0, 1, 2, 3},
        {4, 5, 6, 7},
    }
    for _, col := range grid {
        for _, value := range col {
            fmt.Println(value)
        }
    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...