我想对杂草进行配对并计算其频率
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}]
?
答案 0 :(得分:8)
您没有将指针传递给func weed(ps PairSlice)
。然后,当您在追加循环中创建新切片时,您将附加到另一个切片而不修改第一个切片。
略微更改了您的代码,我认为它现在按预期工作: