【发布时间】:2018-12-10 18:32:04
【问题描述】:
在 Go 中,同时遍历 2 个集合的最佳方法是什么?
在我的程序中,我有一个函数创建两个数组,另一个函数需要同时迭代它们(在每次迭代中访问两个数组中的第 I 个元素)。
如果我只有一个输入,我会在第一个函数中创建一个通道(而不是一个数组),并使用范围循环从各种 goroutine 对其进行迭代。
在这种情况下,有没有比创建索引通道并使用它来访问数组更简单的解决方案?
func main() {
// Prepare two arrays.
arrA := [12]int{1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144}
arrB := arrA
// Create a channel with the indexes.
c := make(chan int, len(arrA))
for i := range arrA {
c <- i
}
close(c)
poolSize := 3
var wg sync.WaitGroup
wg.Add(poolSize)
for i := 1; i <= poolSize; i++ {
go func() {
defer wg.Done()
for j := range c {
fmt.Printf("%v == %v\n", arrA[j], arrB[j])
}
}()
}
wg.Wait()
}
【问题讨论】: