Kurze Antwort: go ist nicht für diese Art von Problem gedacht. Was Sie wollen, ist ein Äquivalent der zip
Funktion, die nativ in einigen Sprachen vorhanden ist (zB Haskell, Python, ...)
In Golang haben Sie jedoch ein großes Problem: Sie können nicht dynamisch haben Arten. Das heißt: Ein Array kann nur einen Typ (int OR bool) enthalten, nicht mehrere. Die Problemumgehung besteht darin, ein Array von Schnittstellen zu erstellen, aber das bedeutet, dass Sie hässliche Typassertionen erstellen müssen, um den richtigen Typ zurück zu bekommen.
Auch Sie haben eine allgemeine Möglichkeit, das zu tun, aber der Typ, den Sie am Ende erhalten werden, ist und keine Möglichkeit zu wissen, was drin ist.
Für Ihr Beispiel: Hier ist die einfachste Art und Weise zu tun, was Sie (nicht allgemein) wollen:
func main() {
a := [3]int{2, 3, 5}
b := [2]bool{true, false}
var c [6][2]interface{}
i := 0
for _, val1 := range a {
for _, val2 := range b {
c[i] = [2]interface{}{val1, val2}
i += 1
}
}
var a1 int = c[0][0].(int)
var b1 bool = c[0][1].(bool)
fmt.Printf("c[0] is %v, a1 is %d and b1 is %v\n", c[0], a1, b1)
fmt.Println(c)
}
Wie Sie sehen können, das ist hässlich und nutzlos in der Praxis (und sehr fehleranfällig)
Also, wenn Sie diese Art von Transformationen machen möchten, sollten Sie eine andere Sprache verwenden, Go wurde (und wird nicht) für diese Art von Zwecken entwickelt.
Vielen Dank @ t-claverie für Ihre Antwort. Ihr Code-Beispiel ist genau das, was ich mit "multiple For-Range-Schleifen" meinte ... aber die Sache ist, dass es noch mehr Arrays geben kann, die iteriert werden sollten ... Sie sagten, das größte Problem ist das "zwei Typen in einem Array" -Problem ... wie wäre es, diesen Teil meines Problems zu lösen, indem man das Array "c" durch eine Funktion "c" ersetzt, die die Typ-Awareness wie folgt hat: 'func c (a int , b bool) '? –
@uzed_creative Wenn Sie den Typ und die Anzahl Ihrer Arrays haben, ist es möglich. Wenn Sie dies nicht tun, müssen Sie benutzerdefinierte Funktionen mit dem Typ 'func f (args interface {} ...)' erstellen, die die selbe Typ-Assertion wie oben ausführen. –