package letter import "time" // ConcurrentFrequency concurrently calls Frequency // and returns the final Frequency Map func ConcurrentFrequency(input []string) FreqMap { var procCnt = len(input) var toMerge []FreqMap for _, chunk := range input { go func(chunk string) { toMerge = append(toMerge, Frequency(chunk)) procCnt-- }(chunk) } for procCnt > 0 { time.Sleep(time.Millisecond) } // We should have all FreqMaps now... merge them ret := make(map[rune]int) for _, aResult := range toMerge { for k, v := range aResult { ret[k] += v } } return ret }