英文:
In Go (golang), how to iterate two arrays, slices, or maps using one `range`
问题
要同时迭代两个切片或映射,可以使用for
循环和range
函数的结合。以下是示例代码:
slice1 := []int{1, 2, 3}
slice2 := []int{4, 5, 6}
for i := 0; i < len(slice1); i++ {
x := slice1[i]
y := slice2[i]
// 进行操作
}
对于映射(map),可以使用range
函数迭代键值对。以下是示例代码:
m := map[string]int{"a": 1, "b": 2, "c": 3}
for key, value := range m {
// 进行操作
}
请注意,Go语言中没有直接的方式可以像Python中那样同时迭代多个切片或映射。你需要使用索引来访问对应位置的元素。
英文:
To iterate over an array, slice, string, map, or channel, we can use
for _, x := range []int{1, 2, 3} {
// do something
}
How can I iterate over two slices or maps simultaneously? Is there something like following in python?
for x, y in range([1, 2, 3], [4, 5, 6]):
print x, y
答案1
得分: 43
你不能这样做,但是如果它们的长度相同,你可以使用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])
}
}
}
它返回:
1
11
2
21
3
31
英文:
You cannot, but if they are the same length you can use the index from 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])
}
}
}
It returns
1
11
2
21
3
31
答案2
得分: 13
如果你的切片长度相同,可以像这样使用range
:
for i := range x {
fmt.Println(x[i], y[i])
}
英文:
If your slices are the same length, use range
like this:
for i := range x {
fmt.Println(x[i], y[i])
}
答案3
得分: 7
你可以这样做,但需要创建一个新的数组(这可能会或可能不会成为你的障碍)。
for _, i := range append([]int{1, 2, 3}, []int{4, 5, 6, 7}...) {
fmt.Printf("%v\n", i)
}
请注意,这种方法适用于长度不同的数组。可以在 https://play.golang.org/p/DRCI_CwSjA 上查看一个示例。
英文:
You can do this, at the cost of creating a new array (which may or may not be a deal breaker for you)
for _, i := range append([]int{1, 2, 3}, []int{4, 5, 6, 7}...) {
fmt.Printf("%v\n", i)
}
Note it works with different length arrays. See https://play.golang.org/p/DRCI_CwSjA for a playground example.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论