In Go (golang), how to iterate two arrays, slices, or maps using one `range`

huangapple go评论81阅读模式
英文:

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 (
    &quot;fmt&quot;
)

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(&quot;%v\n&quot;, i)
}

Note it works with different length arrays. See https://play.golang.org/p/DRCI_CwSjA for a playground example.

huangapple
  • 本文由 发表于 2015年1月20日 22:05:00
  • 转载请务必保留本文链接:https://go.coder-hub.com/28047311.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定