Maison > développement back-end > Golang > le corps du texte

Comment déplacer un élément dans une tranche en Go sans duplication ?

Linda Hamilton
Libérer: 2024-11-02 09:06:29
original
696 Les gens l'ont consulté

How to Move an Item Within a Slice in Go Without Duplication?

Déplacer un élément dans une tranche dans Go

Dans Go, il est courant de manipuler des tranches, qui sont des structures de données dynamiques qui contiennent un séquence d'éléments. Une tâche que vous pouvez rencontrer consiste à déplacer un élément d'une position à une autre dans la tranche.

Pour résoudre ce problème, vous pouvez essayer l'approche suivante :

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)
Copier après la connexion

Cependant, cette approche aboutit dans un comportement inattendu :

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] 
Copier après la connexion

Comme vous l'avez remarqué, l'élément dans la position d'origine est dupliqué lorsqu'il est inséré.

Solution :

Pour correctement déplacer un élément dans une tranche, vous pouvez utiliser l'approche suivante :

  1. Supprimer l'élément de sa position d'origine :

    removeItem := slice[indexToRemove]
    updatedSlice := append(slice[:indexToRemove], slice[indexToRemove+1:]...)
    fmt.Println("Updated slice before moving:", updatedSlice)
    Copier après la connexion
  2. Insérez l'élément à la nouvelle position :

    insertedSlice := append(updatedSlice[:indexWhereToInsert], removeItem)
    finalSlice := append(insertedSlice, updatedSlice[indexWhereToInsert:]...)
    fmt.Println("Final slice after moving:", finalSlice)
    Copier après la connexion

Voici un exemple de code fonctionnel :

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)
}
Copier après la connexion

Sortie :

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]
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!