Слияние карт в Голанге одновременно - PullRequest
0 голосов
/ 12 мая 2018

Я пытаюсь объединить много карт одновременно. Я хочу получить две карты из канала, объединить эти две карты и отправить объединенную карту обратно на тот же канал, пока объединение карт не закончится.

В целом я создаю карты одновременно и хочу начать объединение карт, как только появятся две. В конце я хочу иметь одну объединенную карту всех произведенных карт.

Я хочу сделать что-то вроде этого:

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

Есть идеи?

1 Ответ

0 голосов
/ 12 мая 2018

Начните с пустой карты и объедините все карты, полученные на канале, с картой:

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

Цикл завершается, когда канал c закрыт. Карта merged - это объединение всех карт, полученных на c.

Используйте переменную для ссылки на объединенную карту вместо отправки объединенной карты обратно в канал. Отправка объединенной карты обратно в канал усложняет конечное условие без увеличения параллелизма.

...