Si j'ai
array1 := []int{1, 3, 4, 5}
array2 := []int{2, 4, 6, 8}
Et je veux insérer array2[2]
i.e 6
à array1[1]
i.e avant 3
pour que array1
devienne une tranche de {1, 6, 3, 4, 5}
. Comment puis-je le faire?
La plupart des techniques que j'ai lues en ligne impliquent l'utilisation de l'opérateur :
, mais les éléments restants sont également insérés. Comment puis-je ajouter des valeurs uniques à un index dans une tranche?
Manière simple, efficace et logique:
array1
a suffisamment de capacité (longueur) pour accueillir le nouvel élément insérable. Pour ce faire, ajoutez un seul élément en utilisant la construction append()
(peu importe ce que c'est, ça va être écrasé).copy()
(éléments que vous souhaitez insérer auparavant).Dans du code:
array1 := []int{1, 3, 4, 5}
array2 := []int{2, 4, 6, 8}
array1 = append(array1, 0) // Step 1
copy(array1[2:], array1[1:]) // Step 2
array1[1] = array2[2] // Step 3
fmt.Println(array1)
Sortie (essayez-le sur Go Playground ):
[1 6 3 4 5]
étendant la réponse de @Volker, je l'ai posée ici https://play.golang.org/p/3Hla2y2ava aussi si vous voulez le tester.
package main
import "fmt"
func main() {
array1 := []int{1, 3, 4, 5}
array2 := []int{2, 4, 6, 8}
temp := append([]int{array2[2]}, array1[1:]...)
array1 = append(array1[:1], temp...)
fmt.Println(array1)
}
J'ai trouvé la configuration de la question assez délicate à suivre.
Reformulés, ils veulent insérer un élément. Nous avons ici un tableau où il manque l'élément 3
et nous voulons l'insérer.
package main
import (
"fmt"
)
func main() {
a := []int{1, 2, 4, 5, 6}
b := 3
// Make space in the array for a new element. You can assign it any value.
a = append(a, 0)
fmt.Println(a)
// Copy over elements sourced from index 2, into elements starting at index 3.
copy(a[3:], a[2:])
fmt.Println(a)
a[2] = b
fmt.Println(a)
}
Je ne sais pas si c'est optimal ou pas, mais ce code fonctionne pour moi:
func sliceins(arr []int, pos int, elem int) []int { //insert element before pos in slice. if pos >= len(arr) insert into tail
if pos < 0 {
pos = 0
} else if pos >= len(arr) {
pos = len(arr)
}
out := make([]int, len(arr)+1)
copy(out[:pos], arr[:pos])
out[pos] = elem
copy(out[pos+1:], arr[pos:])
return out
}
Dans votre cas, il suffit d'appeler
sliceins(array1, 1, array2[2])