Wie löscht man ein Element aus einer Slice in Golang

Suraj Joshi 30 Januar 2023
  1. Sub-Slices von einer gegebenen Slice erstellen
  2. Elemente aus Slice in Go löschen
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 avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Verwandter Artikel - Go Slice