jjzjj

multidimensional-array - 戈朗 : Multidimensional array using slice of slice strategy resulting in strange output

coder 2023-06-27 原文

我在 golang 中为二维数组使用以下简单代码,其中 APPEND 函数导致重复值而不是追加。

package main

import "fmt"

func main() {
    var n int
    fmt.Scanf("%d", &n)
    array := [][]int{}
    row := make([]int, n)
    for _, _ = range row {
        for j, _ := range row {
            fmt.Scanf("%d", &row[j])
        }
        fmt.Println("Printing current Row", row)
        array = append(array, row)
        fmt.Println("Printing curent Array", array)
    }
    fmt.Println("Final Array", array)
}

但奇怪的是,这并没有出乎意料。 如果假设我希望这件事发生(输入)

2
1 2
3 4

然后我运行这个程序,我得到这个作为返回

2     //Dimension for matrix
1     //Iteration one begins
2
Printing current Row [1 2]
Printing curent Array [[1 2]]
3     //Iteration two begins
4
Printing current Row [3 4]
Printing curent Array [[3 4] [3 4]]
Final Array [[3 4] [3 4]]

我不明白为什么 APPEND 函数会导致重复条目。 想知道如何纠正这也是潜在的CONCEPT

最佳答案

出现此行为是因为您没有将新的 row slice 添加到您的 array。每次迭代都简单地读入相同的 row slice 以覆盖先前的值。尝试以下:

func main() {
    var n int
    fmt.Scanf("%d", &n)
    array := [][]int{}

    for i := 0; i < n; i++ {
        row := make([]int, n) // create a new slice to add next row values
        for j, _ := range row {
            fmt.Scanf("%d", &row[j])
        }
        fmt.Println("Printing current Row", row)
        array = append(array, row)
        fmt.Println("Printing curent Array", array)
    }
    fmt.Println("Final Array", array)
}

关于multidimensional-array - 戈朗 : Multidimensional array using slice of slice strategy resulting in strange output,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38607117/

有关multidimensional-array - 戈朗 : Multidimensional array using slice of slice strategy resulting in strange output的更多相关文章

随机推荐