Warum können Go-Slices nicht als Kartenschlüssel verwendet werden?

Susan Sarandon
Freigeben: 2024-11-19 05:45:02
Original
581 Leute haben es durchsucht

Why Can't Go Slices Be Used as Map Keys?

Einschränkungen bei der Verwendung von Go-Slices als Map-Schlüssel

Go-Slices, die im Wesentlichen Implementierungen von Go-Arrays sind, weisen Ähnlichkeiten mit Arrays hinsichtlich auf ihre wertartige Natur. Allerdings unterscheidet sich ihre Eignung als Map-Schlüssel deutlich von der von Arrays. Diese Unterscheidung ergibt sich aus der Tatsache, dass Slices auf zugrunde liegende Arrays verweisen, was zu Komplexitäten führt, die bei Arrays nicht vorhanden sind.

Wie Nigel Tao erklärt, ist das Kopieren eines Slices dank seines O(1) deutlich schneller als das Kopieren eines Arrays ) Zeitkomplexität im Vergleich zur O(Längen)-Komplexität von Arrays. Dieser Unterschied verdeutlicht die Unterscheidung zwischen Werttypen (Arrays) und Referenztypen (Slices).

Bei der Definition von Kartenschlüsseln ist es notwendig, einen Begriff der Gleichheit zu etablieren. Bei Arrays lässt sich die Gleichheit einfach durch den Vergleich einzelner Elemente feststellen. Für Slices gibt es jedoch mehrere Möglichkeiten, Gleichheit zu definieren. Erwägen Sie elementweise Gleichheit oder Gleichheit basierend auf dem zugrunde liegenden Array-Speicher, auf den sie verweisen.

Darüber hinaus führt das Einfügen eines Schlüssels in eine Karte zu Unsicherheit darüber, ob eine teure Kopie des gesamten Backing-Arrays erforderlich ist. Während das Kopieren den Erwartungen entsprechen könnte, würde es vom Zuweisungsverhalten von Slices abweichen.

Um diese Komplexität zu veranschaulichen, betrachten Sie das folgende Beispiel:

m := make(map[[]int]bool)
s0 := []int{6, 7, 8}
s1 := []int{6, 7, 8}
s2 := s0
m[s0] = true
s2[0] = 9
println(m[s0])
println(m[s1])
println(m[s2])
Nach dem Login kopieren

Die unterschiedlichen Erwartungen, die Programmierer möglicherweise an die haben Das Ergebnis verdeutlicht die mögliche Verwirrung, die bei der Verwendung von Slices als Kartenschlüssel entsteht. Um solche Unklarheiten zu vermeiden, wurde die Entscheidung getroffen, die Verwendung von Slices als Kartenschlüssel in Go zu verbieten.

Das obige ist der detaillierte Inhalt vonWarum können Go-Slices nicht als Kartenschlüssel verwendet werden?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage