登录
首页 >  Golang >  Go问答

合并多个地图道相集合成_into一张?

来源:stackoverflow

时间:2024-03-11 11:48:26 298浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《合并多个地图道相集合成_into一张?》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

我正在实现一个计算单词数的函数,并且我正在尝试用 goroutine 来编写它。到目前为止,我已经将 []string 数组制作为原始字符串文本的合适大小,并将它们发送到每个 goroutine 来计算单词并将它们添加到 map[string]int 内的 k/v 对,然后我想将它们全部通过我的频道并阅读所有地图,然后简单地计算总共有多少个单词,然后返回此 map[string]int,但这就是我迷失的地方。我尝试做类似的事情

mapsummary := make(map[string]int)
for k, v := range channel {
    mapsummary[k] += v
}

但这不起作用,因为我在范围内使用了两个变量,并且只有一个我不知道如何做到这一点。那么如何将我通过频道发送的所有这些地图添加到一起呢?我不需要你们向我展示这是如何完成的(这是一项家庭作业),但由于我在实验中没有得到助教的任何帮助,我非常感谢一些关于如何完成此操作的线索,我也看到我如何分配 []string 数组不好,但我会自己弄清楚! :) 这段代码不包含主要功能或大部分代码,但包含必要的部分,希望能帮助你理解它。

ch := make(chan map[string]int)
for i := 0; i < 8; i++ {
    wg.Add(1)
    words := text[i*(len(text)/8):(i+1)*(len(text)/8)]
    go count(words, ch, wg)
}
wg.Wait()

mapSummary := make(map[string]int)
for k, v := range ch {
    mapSummary[k] += v
}
return mapSummary

func count(words []string, ch chan<- map[string]int, wg *sync.WaitGroup) {
    freqs := make(map[string]int)
    for _, word := range words {
        freqs[word] += 1
    }
    wg.Done()
    ch <- freqs
}

它告诉我“范围内变量太多”。


解决方案


如果我使用 for k, v := range 通道,它会告诉我范围内的许多变量

那是因为通道只是一个值列表,没有键。所以这样做:

for val := range channel {
    // ..
}

现在 val 将成为您的地图之一,每次循环时,因此您可能也希望对其进行范围:

for val := range channel {
    for k, v := range val {
        // Put your aggregation logic here
    }
}

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>