Maison > développement back-end > Golang > Comment déplacer un élément de tranche dans Go sans créer de doublons ?

Comment déplacer un élément de tranche dans Go sans créer de doublons ?

DDD
Libérer: 2024-11-01 09:48:02
original
779 Les gens l'ont consulté

How do you move a slice item in Go without creating duplicates?

Déplacer un élément de tranche dans Go : comprendre les techniques correctes

Parcourir des tranches dans Go implique souvent de réorganiser leurs éléments. Tenter de déplacer directement un élément d'une position à une autre peut conduire à des résultats inattendus, comme le démontre l'extrait de code fourni :

<code class="go">slice := []int{0,1,2,3,4,5,6,7,8,9}

indexToRemove := 1
indexWhereToInsert := 4

slice = append(slice[:indexToRemove], slice[indexToRemove+1:]...)
newSlice := append(slice[:indexWhereToInsert], 1)
slice = append(newSlice, slice[indexWhereToInsert:]...)</code>
Copier après la connexion

Cette approche vise à déplacer l'élément de indexToRemove vers indexWhereToInsert, mais la sortie présente deux copies de l'élément déplacé. L'erreur réside dans la manière dont l'élément est supprimé et inséré. Explorons une approche alternative :

Utilisation de fonctions personnalisées pour la manipulation d'éléments

Au lieu de modifier manuellement la tranche, nous pouvons créer des fonctions dédiées pour l'insertion et la suppression :

<code class="go">func insertInt(array []int, value int, index int) []int {
    return append(array[:index], append([]int{value}, array[index:]...)...)
}

func removeInt(array []int, index int) []int {
    return append(array[:index], array[index+1:]...)
}</code>
Copier après la connexion

Déplacer des éléments avec précision

Avec ces fonctions d'assistance, déplacer un élément est simple :

<code class="go">func moveInt(array []int, srcIndex int, dstIndex int) []int {
    value := array[srcIndex]
    return insertInt(removeInt(array, srcIndex), value, dstIndex)
}</code>
Copier après la connexion

Exemple d'implémentation et de sortie

<code class="go">func main() {
    slice := []int{0,1,2,3,4,5,6,7,8,9}

    fmt.Println("Original slice:", slice)

    slice = insertInt(slice, 2, 5)
    fmt.Println("After insertion:", slice)

    slice = removeInt(slice, 5)
    fmt.Println("After removal:", slice)

    slice = moveInt(slice, 1, 4)
    fmt.Println("After moving:", slice)
}</code>
Copier après la connexion

Sortie :

Original slice: [0 1 2 3 4 5 6 7 8 9]
After insertion: [0 1 2 3 4 2 5 6 7 8 9]
After removal: [0 1 2 3 4 5 6 7 8 9]
After moving: [0 2 1 3 4 5 6 7 8 9]
Copier après la connexion

Cette approche déplace correctement l'élément de l'index 1 vers l'index 4, ce qui donne la sortie attendue.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal