更新切片切片中的一个位置会导致多次更新 [英] updating one position in a slice of slices results in multiple updates

查看:11
本文介绍了更新切片切片中的一个位置会导致多次更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我学习围棋和玩棋子,但我有一个问题

我有一个带有&q;的默认矩阵,但当我尝试将位置0,0更改为符号时,所有n,0位置都有&q;#&q;,换句话说,我从以下位置开始:

[. . . . .]
[. . . . .]
[. . . . .]
[. . . . .]
[. . . . .]

使用此函数修改0,0位置:

func drawSym(table *[][]string) {
    (*table)[0][0] = "#" 
}

我得到

[# . . . .]
[# . . . .]
[# . . . .]
[# . . . .]
[# . . . .]

当我需要这样的矩阵时

[# . . . .]
[. . . . .]
[. . . . .]
[. . . . .]
[. . . . .]

程序的完整代码在操场https://play.golang.org/p/xvkRhmNvdIP

推荐答案

如果矩阵大小不变,则不需要传入指向您的切片(或切片的切片)的指针。

这样,您可以简化表的创建/初始化,如下所示:

func createTable(size int) (table [][]string) {
    table = make([][]string, size)

    for i := 0; i < size; i++ {
        table[i] = make([]string, size) // create a new row per iteration
        for j := 0; j < size; j++ {
            table[i][j] = "."
        }
    }
    return
}

table := createTable(5)

drawprint函数也得到了简化,因为它们也不需要切片指针:

https://play.golang.org/p/KmwynzUj0I-

这篇关于更新切片切片中的一个位置会导致多次更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆