2015-01-20 3 views
15

Мы можем использоватьВ golang, как перебираются два массива с использованием одного `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 
+2

Вы не можете. Требуется некоторое программирование. – Volker

+1

Оцените, можете ли объяснить, почему дайте мне нижний предел – waitingkuo

+2

Ваши ломтики одинаковой длины? Если да, вы можете использовать индекс, возвращаемый 'range' для обоих из них. –

ответ

19

Вы не можете, но если они имеют одинаковую длину вы можете использовать индекс от range.

package main 

import (
    "fmt" 
) 

func main() { 
    r1 := []int{1, 2, 3} 
    r2 := []int{11, 21, 31} 

    for i, _ := range r1 { 
     fmt.Println(r1[i]) 
     fmt.Println(r2[i]) 
    } 
} 

возвращает

1 
11 
2 
21 
3 
31 
+0

Это полезно, спасибо – waitingkuo

8

Если кусочки одинаковой длины, используйте range так:

for i := range x { 
    fmt.Println(x[i], y[i]) 
} 
+0

Спасибо, он решает мою проблему – waitingkuo

1

Вы можете сделать это, за счет создания нового массива (который может быть или не быть торговым автоматом для вас)

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 для примера игровой площадки.

Смежные вопросы