Junior — Middle
Comment peut-on supprimer efficacement un élément d'une tranche sans préserver l'ordre des éléments, tout en maintenant une complexité constante de l'opération?
sobes.tech IA
Réponse de l'IA
Pour supprimer un élément d'un slice en Go sans préserver l'ordre des éléments et avec une opération de complexité constante O(1), vous pouvez remplacer l'élément à supprimer par le dernier élément du slice, puis réduire la taille du slice de un.
Exemple :
func removeUnordered(s []int, i int) []int {
s[i] = s[len(s)-1] // remplace l'élément i par le dernier
return s[:len(s)-1] // réduit la taille du slice
}
// Utilisation :
s := []int{10, 20, 30, 40, 50}
s = removeUnordered(s, 1) // supprime l'élément à l'indice 1 (20)
// Maintenant, s peut être, par exemple, [10, 50, 30, 40]
Cette méthode ne conserve pas l'ordre des éléments, mais elle est très rapide, car elle ne nécessite pas de décalages d'éléments.