golang 为 slice slice (二维 slice )中的现有元素赋值

标签 go 2d slice

我有一个 slice ,它由字符串类型的 slice 组成。我希望能够为这片 slice 的各个元素赋值,不一定按顺序。然后,稍后,我希望能够更改任何特定元素的值。我已经阅读了有关 slice 的相同问题的帖子,但我不知道如何将其应用于 slice 。考虑这段代码:

package main

import (
    "fmt"
    "strconv"
)

type aRow []string
type aGrid struct {
    col []aRow
}

func main() {
    var c aGrid
    r := make(aRow, 4) // each row will have 4 elements
    for i := 0; i < 3; i++ {
        c.col = append(c.col, r) // there will be 3 rows
    }
    i, j := 1, 2
    c.col[i][j] = "i=" + strconv.Itoa(i) + "  j=" + strconv.Itoa(j)

    fmt.Println("c= ", c)
    // c=  {[[  i=1  j=2 ] [  i=1  j=2 ] [  i=1  j=2 ]]}
}

我想将字符串分配给 c 的第 i 个 slice 的第 j 个元素,但它将字符串分配给 c 的每个 slice 的第 j 个元素。

我试过得到内部 slice 的支持值,比如
i, j := 1, 2
    c.col[i][j].value = "i=" + strconv.Itoa(i) + "  j=" + strconv.Itoa(j)

//  yields "c.col[i][j].value undefined (type string has no field or method value)"

和指针
    p := &c.col[i][j]
    p.value = "i=" + strconv.Itoa(i) + "  j=" + strconv.Itoa(j)

// yields "p.value undefined (type *string has no field or method value)"

我错过了什么?

最佳答案

您正在附加同一行 r对于每一列。

c.col = append(c.col, r)

所以,每一列都有相同的行r那为什么设置在一行中意味着设置在每一行中。

为每一列创建新行。
for i := 0; i < 3; i++ {
    r := make(aRow, 4) // each row will have 4 elements
    c.col = append(c.col, r) // there will be 3 rows
}

关于golang 为 slice slice (二维 slice )中的现有元素赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61442946/

相关文章:

go - 如何使用Pion/Webrtc将VP8帧间转换为图像?

java - 将列表添加到二维数组列表

python - 计算满足条件的列部分的平均值以创建新的数据框

matlab - 我什么时候可以传递文字 : to a function?

javascript - 如何更改单词中间字母的颜色(来自数组),javascript

mongodb - 在 Golang 的两个不同结构字段中映射 Mongo _id

go - 多个 goroutine 中的命名空间 uuid

unit-testing - 具有 Google Cloud API 依赖项的单元测试代码

java - Libgdx Spritebatch 错误

c++ - 用direct2d创建位图图集, "current bitmap"指的是什么?