Dictionary 合并Golang中的地图
我正在尝试同时合并多个地图。 我想从一个频道弹出两个贴图,合并这两个贴图,并将合并后的贴图发送回同一频道,直到合并贴图完成 更重要的是,我同时生成地图,我希望在有两个可用地图时立即开始合并地图。最后,我希望有一个所有生成的地图的合并地图 我想做这样的东西:Dictionary 合并Golang中的地图,dictionary,go,concurrency,channel,Dictionary,Go,Concurrency,Channel,我正在尝试同时合并多个地图。 我想从一个频道弹出两个贴图,合并这两个贴图,并将合并后的贴图发送回同一频道,直到合并贴图完成 更重要的是,我同时生成地图,我希望在有两个可用地图时立即开始合并地图。最后,我希望有一个所有生成的地图的合并地图 我想做这样的东西: func processMaps(c1 chan map[string]int) { for map1 := range c1 { map2 := <-c1 mergedMap := mergeM
func processMaps(c1 chan map[string]int) {
for map1 := range c1 {
map2 := <-c1
mergedMap := mergeMaps(map1, map2)
c1 <- mergedMap
}
}
}
func进程映射(c1 chan map[string]int){
对于map1:=范围c1{
map2:=从空地图开始,并将频道上接收到的任何地图合并到地图:
merged := make(make[string]int)
for m := range c {
for k, v := range m {
merged[k] = v
}
}
当通道c
关闭时,循环退出。mapmerged
是在c
上接收的所有映射的合并
使用变量引用合并映射,而不是将合并映射发送回频道。将合并映射发送回频道会使结束条件更加复杂,而不会增加并发性。根据您概述的方法,您可能会创建许多映射(这很昂贵!)并一次又一次地复制键和值。我建议您采用一种更简单的解决方案,如答案所示,将映射保留在函数的上限范围内;随着新映射的出现,将两者合并。当然,这不是很并行,但其他解决方案可能会更昂贵,或者需要互斥。如果您真的死心塌地设置同时,您可以给出一个快照-。