Как и почему этот простой цикл с использованием диапазона работает для печати простого трехмерного массива в Go? - PullRequest
0 голосов
/ 20 марта 2019

Я пытался использовать функцию диапазона таким образом, чтобы напечатать доску, и она просто сработала, но я не могу решить, почему?Как соотносятся строки и количество столбцов?

package main
import "fmt"

func main() {
    var board [2][2][2]string

    for row := range board {
        for column := range board {
            for third := range board {
                fmt.Print(row, column, third)
                fmt.Println()
            }
        }
    }
}

1 Ответ

4 голосов
/ 20 марта 2019

Ваш код не делает то, что вы думаете, что он делает. Вы перебираете массив верхнего уровня в каждом цикле. Тот факт, что каждый массив имеет ровно 2 элемента, дает вам иллюзию успеха. Ошибка становится более очевидной, если вы распечатываете значения, а не индексы ( детская площадка ):

var board = [2][2][2]string{
    {
        {"a", "b"},
        {"c", "d"},
    },
    {
        {"e", "f"},
        {"g", "h"},
    },
}

for _, rowValue := range board {
    for _, columnValue := range board {
        for _, thirdValue := range board {
            fmt.Println(rowValue, columnValue, thirdValue)
            fmt.Println()
        }
    }
}

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

for _, rowValue := range board {
    for _, columnValue := range rowValue {
        for _, thirdValue := range columnValue {
            fmt.Printf("\t%s", thirdValue)
        }
        fmt.Printf("\n")
    }
    fmt.Printf("\n\n")
}

, который дает этот вывод:

a   b
c   d


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