dongqieli4164 2019-03-04 17:41
浏览 13
已采纳

为什么我的append函数将切片的每个成员更改为要添加的新项目?

I am making a simple prime factor function that can put a slice that is [][]int like

prime_factors_mult(315) => [[3,2],[5,1],[7,1]]

but instead of this result I get [[7,1][7,1][7,1][7,1]] which is afterwards reduced to a empty slice because they repeat them selfs. I tried to look at it with step by step and it changes all the values to the last append. What should I do to avoid this ?

func prime_factors_mult(x []int)(y [][]int){// Problem 36
    in :=[]int{0,0}
    var k [][]int
    for _,item := range x{
        tok := 0
        for i:=0;i<len(x);i++{
            if item == x[i]{
                tok++
            }
        }
        in[0]=item
        in[1]=tok
        k=append(k,in)
    }
    for _,item := range k{
        for i:=0;i<len(k);i++{
            if item[0] != k[i][0]{
                y = append(y,item)
            }
        }
    }
    return
}
  • 写回答

2条回答 默认 最新

  • douao2019 2019-03-04 17:50
    关注

    You create your in slice once and then modify it each time, so you add the exact same object to k each time.

    Append a new slice instead:

    k=append(k,[]int{item, tok})
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 有没有帮写代码做实验仿真的
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥30 vmware exsi重置后登不上
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题