golang代码有什么问题

时间:2014-02-13 15:14:57

标签: go

我想对杂草进行配对并计算其频率

package main

import (
    "fmt"
)

type Pair struct {
    a int
    b int
}
type PairAndFreq struct {
    Pair
    Freq int
}

type PairSlice []PairAndFreq

type PairSliceSlice []PairSlice

func (pss PairSliceSlice) Weed() {
    fmt.Println(pss[0])
    weed(pss[0])
    fmt.Println(pss[0])
}

func weed(ps PairSlice) {
    m := make(map[Pair]int)

    for _, v := range ps {
        m[v.Pair]++
    }
    ps = ps[:0]
    for k, v := range m {

        ps = append(ps, PairAndFreq{k, v})

    }
    fmt.Println(ps)
}

func main() {
    pss := make(PairSliceSlice, 12)

    pss[0] = PairSlice{PairAndFreq{Pair{1, 1}, 1}, PairAndFreq{Pair{1, 1}, 1}}

    pss.Weed()
}

打印

[{{1 1} 1} {{1 1} 1}]
[{{1 1} 2}]
[{{1 1} 2} {{1 1} 1}]

但我认为应该是

[{{1 1} 1} {{1 1} 1}]
[{{1 1} 2}]
[{{1 1} 2}]

为什么pss[0]转向[{{1 1} 2} {{1 1} 1}]

1 个答案:

答案 0 :(得分:8)

您没有将指针传递给func weed(ps PairSlice)。然后,当您在追加循环中创建新切片时,您将附加到另一个切片而不修改第一个切片。

略微更改了您的代码,我认为它现在按预期工作:

http://play.golang.org/p/3gaI500Z9h