同时合并Golang中的地图

时间:2018-05-12 18:05:10

标签: dictionary go concurrency channel

我正在尝试同时合并多个地图。 我想从一个通道弹出两个地图,合并这两个地图并将合并后的地图发送回同一个通道,直到完成合并地图。

更大的图景是我同时制作地图,并且我想在有两个可用时立即开始合并地图。最后,我希望得到一张所有制作地图的合并地图。

我想这样做:

func processMaps(c1 chan map[string]int) {
    for map1 := range c1 {
        map2 := <-c1
        mergedMap := mergeMaps(map1, map2)
        c1 <- mergedMap
        }
    }
}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

从空地图开始,将通道上收到的所有地图合并到地图上:

merged := make(make[string]int)
for m := range c {
    for k, v := range m {
       merged[k] = v
    }
}

当通道c关闭时,循环退出。地图mergedc上收到的所有地图的合并。

使用变量来引用合并的地图,而不是将合并的地图发送回频道。将合并后的映射发送回通道会使结束条件更加复杂,而不会增加并发性。