Ich schreibe eine Go-Funktion, die Pythons itertools.permutations()
imitiert, aber alle Permutationen auf einmal zurückgibt, anstatt einzeln zu liefern.Golang - Unerwartetes Multi-Zuweisungsverhalten
Ich sehe ein unerwartetes Verhalten, wenn sie in den folgenden Codezeilen 2 Variablen gleichzeitig Aktualisierung:
setcopy := append([]int(nil), sorted...)
for i := 0; i < r; i++ {
c := counters[r-1-i]
current[i], setcopy = setcopy[c], append(setcopy[:c], setcopy[c+1:]...)
}
ich korrekte Ergebnisse erhalten, wenn das obige Update Entkopplung:
current[i] = setcopy[c]
setcopy = append(setcopy[:c], setcopy[c+1:]...)
I wurde hauptsächlich von den Pop
und Delete
Beispielen aus dem SliceTricks Wiki-Artikel inspiriert. Gibt es einen signifikanten Unterschied zwischen dem und dem, was ich versuche?
Wenn Sie den vollständigen Code (einschließlich eines Beispiels der fehlerhaften Ausgabe und einige Druckanweisungen für das Debuggen) auschecken möchten, können Sie this Gist auschecken.
Ich glaube nicht, da das 'append', das in der Zuweisung verwendet wird, tatsächlich die Größe des Slice reduziert/ein Element löscht (und daher wäre ein neues darunter liegendes Array nicht notwendig). – Redy
Kann nicht erklären, warum, aber die Ausgabe ist die gleiche, als wenn der 'append' zuerst ausgeführt wird: http://play.golang.org/p/ZQ-4cMyNTJ – twotwotwo
Es sieht aus, als ob Sie links-zu-versprochen werden richtige evalordnung - wenn niemand hier einen guten grund findet, würde ich mit diesem golang-nuts schlagen, scheint wirklich komisch. – twotwotwo