Sobes.tech
Junior — Middle

Como pode remover eficazmente um elemento de um slice sem manter a ordem dos elementos, mantendo a complexidade da operação constante?

sobes.tech IA

Resposta da IA

Para remover um elemento de um slice em Go sem manter a ordem dos elementos e com uma operação de complexidade constante O(1), pode substituir o elemento a remover pelo último elemento do slice e, em seguida, encurtar o slice em um.

Exemplo:

func removeUnordered(s []int, i int) []int {
    s[i] = s[len(s)-1] // substitui o elemento i pelo último
    return s[:len(s)-1] // encurta o slice
}

// Uso:
s := []int{10, 20, 30, 40, 50}
s = removeUnordered(s, 1) // remove o elemento no índice 1 (20)
// Agora, s pode ser, por exemplo, [10, 50, 30, 40]

Este método não mantém a ordem dos elementos, mas é muito rápido, pois não requer deslocamentos de elementos.