我需要在輸入中創(chuàng)建一個具有自定義長度的二維切片。切片是我的掃雷器的字段,所以長度將是字段的維度。我需要切片是全局的,現(xiàn)在我將切片直接初始化為字段的常量維度,但是我正在實現(xiàn)難度,所以我需要字段是可變的。//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有沒有一種方法可以聲明變量,然后在函數(shù)中初始化它們,就像這樣(這種方式在 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) } ...}我發(fā)現(xiàn)唯一可行的方法是通過 append() 函數(shù):將字段聲明為 [][] 或 [0][0] 并在用戶輸入后運行一個函數(shù) append() x 次和 y 次到切片
1 回答

慕尼黑8549860
TA貢獻(xiàn)1818條經(jīng)驗 獲得超11個贊
問題中的第一段代碼使用數(shù)組數(shù)組。數(shù)組的長度在編譯時設(shè)置。
像第二段代碼一樣使用切片。切片的長度是動態(tài)的。
如第三段代碼所示,使用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 關(guān)注
- 125 瀏覽
添加回答
舉報
0/150
提交
取消