Maison > Article > développement back-end > Comment déplacer un élément de tranche dans Go sans créer de doublons ?
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!