Sobes.tech
Junior — Middle

Hoe verwijder je effectief een element uit een slice zonder de volgorde van de elementen te behouden, terwijl je de constante complexiteit van de operatie niet overschrijdt?

sobes.tech AI

Antwoord van AI

Om een element uit een slice in Go te verwijderen zonder de volgorde van de elementen te behouden en met een constante complexiteit O(1), kun je het te verwijderen element vervangen door het laatste element van de slice en vervolgens de slice met één verkorten.

Voorbeeld:

func removeUnordered(s []int, i int) []int {
    s[i] = s[len(s)-1] // vervangt het element i door het laatste
    return s[:len(s)-1] // verkort de slice
}

// Gebruik:
s := []int{10, 20, 30, 40, 50}
s = removeUnordered(s, 1) // verwijdert het element op index 1 (20)
// Nu kan s bijvoorbeeld [10, 50, 30, 40] zijn

Deze methode behoudt de volgorde van de elementen niet, maar is zeer snel omdat er geen verschuivingen van elementen nodig zijn.