Wie löscht man ein Element aus einer Slice in Golang
In Go ist slice
ein Array mit variabler Größe, das ab Array indiziert wird, dessen Größe aber nicht festgelegt ist, da es in der Größe verändert werden kann. Jedes Element aus einer slice
kann aufgrund seiner dynamischen Natur aus der slice
gelöscht werden. Das Löschen eines Elements aus einer slice
unterscheidet sich aufgrund des Fehlens eingebauter Funktionen in Go, um ein Element aus einer slice
zu löschen, erheblich von anderen Sprachen.
Sub-Slices von einer gegebenen Slice erstellen
Bevor wir tief in das Löschen eines Elements aus einer slice
eintauchen, werden wir einen Blick auf die Erstellung einer subslice
aus einer gegebenen slice
werfen, da sie eine der Hauptkomponenten für das Löschen eines Elements aus einer slice
ist.
package main
import "fmt"
func main() {
var Slice1 = []int{1, 2, 3, 4}
fmt.Printf("slice1: %v\n", Slice1)
Slice2 := Slice1[:2]
fmt.Printf("slice2: %v\n", Slice2)
}
Ausgabe:
slice1: [1 2 3 4]
slice2: [1 2]
Hier ist slice2
eine Sub-Slice, die aus slice1
gebildet wird und alle Elemente von Anfang an enthält, d.h. Index 0
bis Index 2-1
, d.h. 1
. Beachten Sie hier, daß die Indizierung von slice
in Go von 0
beginnt.
package main
import "fmt"
func main() {
var Slice1 = []int{1, 2, 3, 4}
fmt.Printf("slice1: %v\n", Slice1)
Slice2 := Slice1[2:]
fmt.Printf("slice2: %v\n", Slice2)
}
Ausgabe:
slice1: [1 2 3 4]
slice2: [3 4]
Hier ist slice2
eine aus slice1
gebildete Sub-Slice, die alle Elemente vom Index 2
bis zum Ende der Slice enthält.
Elemente aus Slice in Go löschen
Die Aufgabe, Elemente aus slice
zu löschen, kann auf der Grundlage unserer Anforderungen in verschiedenen Ansätzen durchgeführt werden. Die verschiedenen Möglichkeiten, ein Element aus slice
zu löschen, werden im Folgenden erörtert:
Wenn die Reihenfolge wichtig ist
Wenn wir die Reihenfolge der Scheiben nach dem Entfernen des Elements beibehalten wollen, verschieben wir die Position aller Elemente rechts von gelöschten Elementen um eins nach links.
package main
import "fmt"
func remove(slice []int, s int) []int {
return append(slice[:s], slice[s+1:]...)
}
func main() {
var Slice1 = []int{1, 2, 3, 4, 5}
fmt.Printf("slice1: %v\n", Slice1)
Slice2 := remove(Slice1, 2)
fmt.Printf("slice2: %v\n", Slice2)
}
Ausgabe:
slice1: [1 2 3 4 5]
slice2: [1 2 4 5]
Hier wird slice2
gebildet, nachdem das Element mit dem Index 2
von slice1
entfernt wurde.
Wenn die Reihenfolge nicht wichtig ist
package main
import "fmt"
func remove(s []int, i int) []int {
s[i] = s[len(s)-1]
return s[:len(s)-1]
}
func main() {
var Slice1 = []int{1, 2, 3, 4, 5}
fmt.Printf("slice1: %v\n", Slice1)
Slice2 := remove(Slice1, 2)
fmt.Printf("slice2: %v\n", Slice2)
}
Ausgabe:
slice1: [1 2 3 4 5]
slice2: [1 2 5 4]
Hier wird slice2
gebildet, nachdem das Element am Index 2
aus slice1
entfernt wurde, aber die Reihenfolge der Elemente bleibt hier nicht erhalten. Es ist schneller als die vorherige Methode.
Wenn also die Reihenfolge eine höhere Priorität als die Geschwindigkeit hat, verwenden wir die erste Methode, und wenn die Geschwindigkeit eine höhere Priorität als die Reihenfolge hat, verwenden wir die zweite Methode, um ein Element aus einem slice
zu löschen.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn