Heim > Backend-Entwicklung > Golang > Go Slices: Was ist der Unterschied zwischen Kapazität und Länge?

Go Slices: Was ist der Unterschied zwischen Kapazität und Länge?

DDD
Freigeben: 2024-12-17 14:26:10
Original
846 Leute haben es durchsucht

Go Slices: What's the Difference Between Capacity and Length?

Go-Slices: Kapazität und Länge entmystifizieren

In Go sind Slices eine leistungsstarke Datenstruktur für die Arbeit mit Datensammlungen. Zwei wichtige Konzepte im Zusammenhang mit Slices sind Kapazität und Länge, deren Verständnis zunächst verwirrend sein kann.

Betrachten Sie das folgende Beispiel:

func main() {
  a := make([]int, 5)
  // [0,0,0,0,0] len=5 cap=5

  b := make([]int, 0, 5)
  // [] len=0 cap=5

  c := b[:2]
  // [0,0] len=2 cap=5

  d := c[2:5]
  // [0,0,0] len=3 cap=3
}
Nach dem Login kopieren

Kapazität vs. Länge

In diesem Beispiel hat a eine Länge von 5 (die Anzahl der Elemente, die es enthält) und eine Kapazität von 5 (die Anzahl der Elemente, die es enthalten kann). vor Neuzuweisung halten). b hat eine Länge von 0 und eine Kapazität von 5, was darauf hinweist, dass es zunächst keine Elemente enthält, aber das Potenzial hat, bis zu 5 Elemente aufzunehmen.

Zeroed Elements

Wenn Sie ein Slice mit make([]int, 0, 5) wie in b erstellen, wird ein Backing-Array erstellt und mit dem Nullwert für seine Elemente initialisiert. Das bedeutet, dass, obwohl b anfangs keine Elemente hat, sein Hintergrundarray fünf auf Null gesetzte Werte enthält.

Wenn Sie ein Slice segmentieren, erstellen Sie ein neues Slice, das dasselbe Backing-Array verwendet. Wenn Sie also c := b[:2] zuweisen, erstellen Sie ein neues Slice, das auf die ersten beiden auf Null gesetzten Elemente des Hintergrundarrays verweist. Daher hat c eine Länge von 2 und enthält die Werte [0,0].

Kapazität der geschnittenen Scheiben

Wenn Sie eine Scheibe schneiden, wird die Kapazität der Der resultierende Slice wird durch die Differenz zwischen dem letzten Index des Slice-Ausdrucks und dem ersten Index bestimmt. Im Fall von d := c[2:5] beträgt dieser Unterschied 3 (5 - 2). Daher hat d eine Kapazität von 3.

Fazit

Das Verständnis von Kapazität und Länge ist entscheidend für die effektive Arbeit mit Slices in Go. Denken Sie daran, dass Slices immer auf ein Backing-Array verweisen und die Kapazität die Größe dieses Backing-Arrays darstellt. Durch das Slicen von Slices erstellen Sie neue Slices, die dasselbe Backing-Array gemeinsam nutzen und dessen Eigenschaften, einschließlich seiner Kapazität, erben.

Das obige ist der detaillierte Inhalt vonGo Slices: Was ist der Unterschied zwischen Kapazität und Länge?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage