登录
首页 >  Golang >  Go问答

创建一个全局二维切片,其大小由用户输入确定

来源:stackoverflow

时间:2024-02-23 22:21:24 403浏览 收藏

目前golang学习网上已经有很多关于Golang的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《创建一个全局二维切片,其大小由用户输入确定》,也希望能帮助到大家,如果阅读完后真的对你学习Golang有帮助,欢迎动动手指,评论留言并分享~

问题内容

我需要创建一个具有自定义长度的二维切片(在输入中获取)。该切片是我的扫雷器的区域,因此长度将是该区域的尺寸。 我需要切片是全局的,现在我将切片直接初始化为字段的常量维度,但我正在实现困难,所以我需要字段是可变的。

//my code right now
const dimx int = 16            //x field dimension
const dimy int = 16            //y field dimension
var bombs int = 40             //number of mines
var number [dimx][dimy]int8    //number contained in the cell, 0 if empty, -1 if mine
var isopen [dimx][dimy]bool    //if the cell is visible to the user
var isflagged [dimx][dimy]bool //if the cell is marked as a bomb

有没有一种方法可以声明变量,然后在函数中初始化它们,如下所示(这种方式在 go 中是不可能的):

//what i'd like to do
var dimx, dimy, bombs int
var number [][]int8
    
func main() {
   scan(&dimx, &dimy, &bombs)
   number = [dimx][dimy]
   ...
}

我也尝试了一些make,但它给了我一个不兼容的分配(不能使用make([] [] uint8,dimx)([] [] uint8类型的值)作为[16] [16] int8):

func main() {
   Scan(&dimX, &dimY, &bombs)
   number = make([][]uint8, dimX)
   for i := range number {
      number[i] = make([]uint8, dimY)
   }
   ...
}

我发现唯一可行的方法是通过append()函数:将字段声明为[][]或[0][0],并在用户输入后运行一个append() x次和y次的函数到切片


正确答案


问题中的第一段代码使用数组的数组。 array 的长度是在编译时设置的。

使用 slice 个切片,如第二个代码片段所示。切片的长度是动态的。

使用 make 分配切片,如第三个代码片段所示。

var dimX, dimY, bombs int
var number [][]int8  // empty [] is a slice.

fmt.Scan(&dimX, &dimY, &bombs)
number = make([][]int8, dimX)
for i := range number {
    number[i] = make([]int8, dimY)
}

注意:问题中的代码在引用元素时使用 int8uint8 。这些是不同的类型。此答案使用 int8

Run the example on the playground

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>