Maison  >  Article  >  développement back-end  >  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
DDDoriginal
2024-11-01 09:48:02666parcourir

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>

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>

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>

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>

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]

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!

Déclaration:
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