Heim  >  Artikel  >  Backend-Entwicklung  >  Wie verschiebt man ein Element innerhalb eines Slice in Go Without Duplication?

Wie verschiebt man ein Element innerhalb eines Slice in Go Without Duplication?

Linda Hamilton
Linda HamiltonOriginal
2024-11-02 09:06:29697Durchsuche

How to Move an Item Within a 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:

  1. 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)
  2. 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!

Stellungnahme:
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