在 Go (golang) 中,如何使用一个“范围”迭代两个数组、切片或映射
In Go (golang), how to iterate two arrays, slices, or maps using one `range`
要遍历数组、切片、字符串、映射或通道,我们可以使用
for _, x := range []int{1, 2, 3} {
// do something
}
如何同时迭代两个切片或地图? python中是否有类似以下内容?
for x, y in range([1, 2, 3], [4, 5, 6]):
print x, y
你不能,但如果它们的长度相同,你可以使用来自 range
的索引。
package main
import (
"fmt"
)
func main() {
r1 := []int{1, 2, 3}
r2 := []int{11, 21, 31}
if len(r1) == len(r2) {
for i := range r1 {
fmt.Println(r1[i])
fmt.Println(r2[i])
}
}
}
它returns
1
11
2
21
3
31
如果您的切片长度相同,请像这样使用 range
:
for i := range x {
fmt.Println(x[i], y[i])
}
你可以做到这一点,代价是创建一个新数组(这对你来说可能会或可能不会破坏交易)
for _, i := range append([]int{1, 2, 3}, []int{4, 5, 6, 7}...) {
fmt.Printf("%v\n", i)
}
注意它适用于不同长度的数组。有关 playground 示例,请参阅 https://play.golang.org/p/DRCI_CwSjA。
它需要一个异步解决方案,可以使用一个通道;
要遍历数组、切片、字符串、映射或通道,我们可以使用
for _, x := range []int{1, 2, 3} {
// do something
}
如何同时迭代两个切片或地图? python中是否有类似以下内容?
for x, y in range([1, 2, 3], [4, 5, 6]):
print x, y
你不能,但如果它们的长度相同,你可以使用来自 range
的索引。
package main
import (
"fmt"
)
func main() {
r1 := []int{1, 2, 3}
r2 := []int{11, 21, 31}
if len(r1) == len(r2) {
for i := range r1 {
fmt.Println(r1[i])
fmt.Println(r2[i])
}
}
}
它returns
1
11
2
21
3
31
如果您的切片长度相同,请像这样使用 range
:
for i := range x {
fmt.Println(x[i], y[i])
}
你可以做到这一点,代价是创建一个新数组(这对你来说可能会或可能不会破坏交易)
for _, i := range append([]int{1, 2, 3}, []int{4, 5, 6, 7}...) {
fmt.Printf("%v\n", i)
}
注意它适用于不同长度的数组。有关 playground 示例,请参阅 https://play.golang.org/p/DRCI_CwSjA。
它需要一个异步解决方案,可以使用一个通道;