我需要在输入中创建一个具有自定义长度的二维切片。切片是我的扫雷器的字段,所以长度将是字段的维度。我需要切片是全局的,现在我将切片直接初始化为字段的常量维度,但是我正在实现难度,所以我需要字段是可变的。//my code right nowconst dimX int = 16 //X field dimensionconst dimY int = 16 //Y field dimensionvar bombs int = 40 //number of minesvar number [dimX][dimY]int8 //number contained in the cell, 0 if empty, -1 if minevar isOpen [dimX][dimY]bool //if the cell is visible to the uservar isFlagged [dimX][dimY]bool //if the cell is marked as a bomb有没有一种方法可以声明变量,然后在函数中初始化它们,就像这样(这种方式在 go 中是不可能的)://what i'd like to dovar dimX, dimY, bombs intvar 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 次到切片
1 回答
慕尼黑8549860
TA贡献1818条经验 获得超11个赞
问题中的第一段代码使用数组数组。数组的长度在编译时设置。
像第二段代码一样使用切片。切片的长度是动态的。
如第三段代码所示,使用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)
}
注意:问题中的代码在引用元素时使用int8
和。uint8
这些是不同的类型。这个答案使用int8
.
- 1 回答
- 0 关注
- 102 浏览
添加回答
举报
0/150
提交
取消