gpt4 book ai didi

来自二维数组的 Golang slice 列?

转载 作者:IT王子 更新时间:2023-10-29 01:14:59 25 4
gpt4 key购买 nike

我很好奇,如何从二维数组创建列 slice ?

我有一个用于 Tic-Tac-Toe 游戏板的数组,我正在尝试创建一个列 slice ,但我的 slice 结果完全相同。

/* Just trying to get rows and columns working first */

func() isWin() bool {
win := make([]char, SIZE*2)
for i:= range BOARD {
fmt.Println("Row")
win[i] = check(BOARD[i][0:SIZE])
fmt.Println("Column")
win[i+SIZE] = check(BOARD[0:SIZE][i])
}
return false
}

func() check(slice []char) (char) {
fmt.Println(slice)
return "-"
}

我给它以下输入:

[E E E E]
[E E E E]
[X O E E]
[X O E E]

我得到了返回

Row
[X O E E]
Column
[X O E E]

但是我想要一个返回

Row
[X O E E]
Column
[E E X X]

我该如何制作这个 slice ?

最佳答案

slice 语法无法实现您想做的事情。你认为 x[i][0:n] 会得到 i 行的所有列。它实际上做的是从 i 行返回列 0n

您必须使用循环来获取列:

func boardColumn(board [][]char, columnIndex int) (column []char) {
column = make([]char, 0)
for _, row := range board {
column = append(column, row[columnIndex])
}
return
}

您用“行”标记的代码实际上是我期望交付列的代码:

win[i] = check(BOARD[0:SIZE][i])

从语义上讲, slice 索引表示:取所有元素的第 i 个元素,从零到 SIZE。但是,正如已经提到的,Go slice 的工作方式不同。 Try for yourself :

x := [][]int{{1,2,3},{4,5,6}}
fmt.Println(x[0:2]) // [[1,2,3],[4,5,6]]
fmt.Println(x[0:2][0]) // [1,2,3]

如您在上面示例的第二行中所见,x[0:2] 返回完整的二维 slice 。最后获取第一个元素返回该二维 slice 的第一行。

关于来自二维数组的 Golang slice 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15618155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com