2015-01-20 7 views
15

Możemy użyćW golang, jak iteracyjne dwie tablice używając jednego `range`

for _, x := range []int{1, 2, 3} { 
    // do something 
} 

iteracyjne tablicę.

Jak mogę powtórzyć dwie tablice jednocześnie?

Czy jest coś takiego jak w python?

for x, y in range([1, 2, 3], [4, 5, 6]): 
    print x, y 
+2

Nie możesz. Potrzebne jest trochę programowania. – Volker

+1

Doceniona, jeśli potrafię wyjaśnić, dlaczego dano mi zniżkę – waitingkuo

+2

Czy plasterki są tej samej długości? Jeśli tak, możesz użyć indeksu zwróconego przez 'range' dla obu z nich. –

Odpowiedz

19

Nie możesz, ale jeśli są tej samej długości można użyć indeksu od 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]) 
    } 
} 

Zwraca

1 
11 
2 
21 
3 
31 
+0

To jest pomocne, dzięki – waitingkuo

8

Jeśli plastry są tej samej długości, użyj range takiego:

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

Dzięki, rozwiązuje mój problem – waitingkuo

1

Można to zrobić, kosztem tworząc nową tablicę (który może, ale nie musi, być dla ciebie wyłącznikiem umowy)

for _, i := range append([]int{1, 2, 3}, []int{4, 5, 6, 7}...) { 
    fmt.Printf("%v\n", i) 
} 

Uwaga: działa z różnymi tablicami długości. Zobacz przykład https://play.golang.org/p/DRCI_CwSjA dla przykładu placu zabaw.