gpt4 book ai didi

go - golang代码有什么问题

转载 作者:IT王子 更新时间:2023-10-29 01:20:30 27 4
gpt4 key购买 nike

我想去除 Pair 并计算它的频率

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}]

最佳答案

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

稍微更改了您的代码,我认为它现在可以正常工作了:

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

关于go - golang代码有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21758135/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com