Heim > Artikel > Backend-Entwicklung > Wie verschiebt man ein Element innerhalb eines Slice in Go Without Duplication?
Verschieben eines Elements innerhalb eines Slice in Go
In Go ist es üblich, Slices zu manipulieren, bei denen es sich um dynamische Datenstrukturen handelt, die ein Element enthalten Folge von Elementen. Eine Aufgabe, auf die Sie möglicherweise stoßen, ist das Verschieben eines Elements von einer Position zu einer anderen innerhalb des Slice.
Um dieses Problem zu lösen, können Sie den folgenden Ansatz versuchen:
slice := []int{0,1,2,3,4,5,6,7,8,9} indexToRemove := 1 indexWhereToInsert := 4 slice = append(slice[:indexToRemove], slice[indexToRemove+1:]...) fmt.Println("slice:", slice) newSlice := append(slice[:indexWhereToInsert], 1) fmt.Println("newSlice:", newSlice) slice = append(newSlice, slice[indexWhereToInsert:]...) fmt.Println("slice:", slice)
Dieser Ansatz führt jedoch zu Ergebnissen bei unerwartetem Verhalten:
slice: [0 2 3 4 5 6 7 8 9] newSlice: [0 2 3 4 1] slice: [0 2 3 4 1 1 6 7 8 9]
Wie Sie bemerkt haben, wird das Element an der ursprünglichen Position beim Einfügen dupliziert.
Lösung:
Korrekt Um ein Element innerhalb eines Slice zu verschieben, können Sie den folgenden Ansatz verwenden:
Entfernen Sie das Element aus seiner ursprünglichen Position:
removeItem := slice[indexToRemove] updatedSlice := append(slice[:indexToRemove], slice[indexToRemove+1:]...) fmt.Println("Updated slice before moving:", updatedSlice)
Fügen Sie das Element an der neuen Position ein:
insertedSlice := append(updatedSlice[:indexWhereToInsert], removeItem) finalSlice := append(insertedSlice, updatedSlice[indexWhereToInsert:]...) fmt.Println("Final slice after moving:", finalSlice)
Hier ist ein funktionierendes Codebeispiel:
func main() { slice := []int{0,1,2,3,4,5,6,7,8,9} indexToRemove := 1 indexWhereToInsert := 4 removeItem := slice[indexToRemove] updatedSlice := append(slice[:indexToRemove], slice[indexToRemove+1:]...) fmt.Println("Updated slice before moving:", updatedSlice) insertedSlice := append(updatedSlice[:indexWhereToInsert], removeItem) finalSlice := append(insertedSlice, updatedSlice[indexWhereToInsert:]...) fmt.Println("Final slice after moving:", finalSlice) }
Ausgabe :
Updated slice before moving: [0 2 3 4 5 6 7 8 9] Final slice after moving: [0 2 3 4 1 5 6 7 8 9]
Das obige ist der detaillierte Inhalt vonWie verschiebt man ein Element innerhalb eines Slice in Go Without Duplication?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!