Ich versuche, die erforderliche Länge für ein Array in einer Merge-Sortierung-Implementierung zu berechnen Ich schreibe go
. Es sieht wie folgt aus:Go-Fehler: nicht konstante Array-Grenze
func merge(array []int, start, middle, end int) {
leftLength := middle - start + 1
rightLength := end - middle
var left [leftLength]int
var right [rightLength]int
//...
}
ich dann diese Beschwerde erhalten, wenn go test
läuft:
./mergesort.go:6: non-constant array bound leftLength
./mergesort.go:7: non-constant array bound rightLength
Ich gehe davon aus go
Benutzer nicht genießen ein Array der Länge mit einem berechneten Wert instanziieren. Es akzeptiert nur Konstanten. Soll ich einfach aufgeben und stattdessen eine Scheibe benutzen? Ich erwarte eine Scheibe ist ein dynamisches Array, was bedeutet, es ist entweder eine verkettete Liste oder Kopien in ein größeres Array, wenn es voll wird.
Was meinst du mit "erwarten" ein Stück ist ein dynamisches Array? [Lesen Sie, was ein Stück tatsächlich ist] (https://blog.golang.org/go-slices-usage-and-internals). –
Das ist, was Slices in Go gemacht werden. Unter der Haube sind sie nur Zeiger auf Arrays. – user937284
@TimCooper interessant. Anstatt Arrays selbst eine komplexe Schnittstelle zu geben, sind Slices eine weitere Schicht, die die Array-Manipulation vereinfacht. – Breedly