如何在Golang中将二维数组打印为网格?

cl25kdpy  于 2023-01-28  发布在  Go
关注(0)|答案(2)|浏览(165)

The 2D Array I am trying to print as a board
注意:我是一个完全的新手在使用围棋和需要这个为最后的项目。
我正在尝试制作游戏,蛇和梯子。我需要打印一个10X10的2D阵列作为网格,这样它看起来更像一个棋盘。
我试过使用:

for row := 0; row < 10; row ++ 10{
                   } for column := 0; column < 10; column++{
                   fmt.Println()
                   }

但它失败了。
有什么函数或方法可以做到这一点吗?

ddhy6vgd

ddhy6vgd1#

就快到了,你应该把你想打印的变量传递给fmt.Println,还要记住这总是会在输出的末尾加一个换行符,你可以使用fmt.Print函数打印变量。

for row := 0; row < 10; row++ {
    for column := 0; column < 10; column++{
        fmt.Print(board[row][column], " ")
    }
    fmt.Print("\n")
}

额外的提示,除了使用硬编码的大小,你还可以使用range来循环每个元素,这对任何大小的数组/切片都有效。

jq6vz3qz

jq6vz3qz2#

基于范围的解决方案

范围使我们不必直接传递长度,因此可以使函数可重用于不同高度和宽度的2D数组(Go By Example range page)。

通用2D矩阵迭代器

使用范围循环遍历二维数组中的每个值可能类似于...
Run this code in Go playground here

// Code for some "board" matrix of type [][]int, for example...
board := [][]int{
    {1, 2, 3},
    {4, 5, 6},
}

// First we iterate over "board", which is an array of rows:
for r, _ := range board {

    // Then we iterate over the items of each row:
    for c, colValue := range board[r] {

        // See string formatting docs at 
        // https://gobyexample.com/string-formatting
        fmt.Printf("value at index [%d][%d]", r, c)
        fmt.Println(" is", colValue)
    }
}
下划线是什么意思

下划线在声明的变量不被使用的地方是必要的,否则(编译器?)将抛出错误,并且不会运行代码。
变量rc用于持续访问矩阵中的整数索引,从0开始向上计数,我们必须在r之后传递下划线_,因为该空格将使我们能够访问整个行对象,而在后面的代码中我们不会使用该对象。(是的,我们也可以定义range row而不是range board[r],这样我们就可以使用row对象了。)
如果我们后来没有在Printf语句中使用c,我们也必须在c的位置传递一个_。下面是一个更简单的版本(和Go Playground),没有索引访问:

// Just prints all the values. 
for _, row := range board {
    for _, colValue := range row {
        fmt.Println(colValue)
    }
}
为什么是“colValue”而不是“col”?

在此模式中,使用了一些有说服力的名称(如“colValue“)而不是column,这是因为在代码的内部点,我们已经深入到单个元素,而不是像使用board[r]访问整个行那样深入到整个元素集
在这里,我们根本不使用索引,因此必须使用_来编写索引。

相关问题