Es wäre bequem, etwas sagen zu können wie:
for _, element := reverse range mySlice {
...
}
Nein, es gibt keinen geeigneten Operator, um den vorhandenen Bereich zu erweitern. Sie müssen einen normalen Countdown für die Schleife durchführen:
s := []int{5, 4, 3, 2, 1}
for i := len(s)-1; i >= 0; i-- {
fmt.Println(s[i])
}
Sie können auch tun:
Ausgabe:
Auch hier: http://play.golang.org/p/l7Z69TV7Vl
quelle
Variation mit Index
quelle
Wie wäre es mit Defer verwenden:
quelle
defer
aber ich glaube, dass es ziemlich schwierig ist, dies in einer Schleife für den Rückwärtsgang zu verwenden, und dass es in Bezug auf das Gedächtnis ziemlich ineffektiv sein sollte.defer
auf eine Weise verwendet, für die es nicht vorgesehen ist. Verwenden Sie dies nicht, da es böse Nebenwirkungen haben kann (Ausführung außerhalb der Reihenfolge). Verwenden Sie einfach diefor
Schleife in der akzeptierten Antwort. Go ist bestrebt, diese Art von cleveren (nicht) Hacks zu minimieren, da sie dazu neigen, dich später in den Arsch zu beißen.Man könnte einen Kanal verwenden, um eine Liste in einer Funktion umzukehren, ohne sie zu duplizieren. Es macht den Code in meinem Sinne schöner.
quelle
[]interface{}
? Weil die Present-Funktionreverse
nur Strings unterstützt.func reverse(lst []interface{}) chan inyterface{}
keine [] Zeichenfolge mehr als Eingabe verwendet. Selbst wenn ein String in die Schnittstelle {} umgewandelt werden kann, kann der String [] nicht in die Schnittstelle [] {} umgewandelt werden. Leider ist die vorliegende Umkehrfunktion die Art von Funktion, die viel umgeschrieben werden muss.Wenn ich Elemente aus einem Slice extrahieren und den Bereich umkehren muss, verwende ich so etwas wie diesen Code:
Ausgabe:
Spielplatz: https://play.golang.org/p/gx6fJIfb7fo
quelle