为了账号安全,请及时绑定邮箱和手机立即绑定

从二维数组中获取 lang slice 列?

从二维数组中获取 lang slice 列?

Go
阿晨1998 2021-06-03 17:42:43
我很好奇,你如何从二维数组创建一个列切片?我有一个用于 Tic-Tac-Toe 游戏板的数组,我正在尝试创建一个列切片,但我的切片输出相同。/* 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]我如何制作这个切片?
查看完整描述

1 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

切片语法无法实现您想要做的事情。您认为这x[i][0:n]将为您提供 row 的所有列i。它实际上做的是将列返回0到nfrom row i。


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


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])

从语义上讲,切片索引表示:将i所有元素的第 th 个元素从零到 SIZE。但是,如前所述,Go 切片的工作方式不同。自己试试:


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]的第二行中看到的,返回完整的 2d 切片。因此,取第一个元素返回该二维切片的第一行。


查看完整回答
反对 回复 2021-06-07
  • 1 回答
  • 0 关注
  • 253 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信