Sobes.tech
Junior — Middle

Kako efikasno ukloniti element iz slice-a bez očuvanja reda elemenata, a pritom ne prelazeći konstantnu složenost operacije?

sobes.tech АИ

Одговор од АИ

Ako želite da uklonite element iz seka u Go bez očuvanja reda elemenata i sa operacijom sa konstantnom složenošću O(1), možete zameniti element koji se uklanja poslednjim elementom sekta i zatim skratiti sek na jedan.

Primer:

func removeUnordered(s []int, i int) []int {
    s[i] = s[len(s)-1] // zamenjuje element i poslednjim
    return s[:len(s)-1] // skraćuje seka
}

// Upotreba:
s := []int{10, 20, 30, 40, 50}
s = removeUnordered(s, 1) // uklanja element na indeksu 1 (20)
// Sada s može biti, na primer, [10, 50, 30, 40]

Ova metoda ne čuva redosled elemenata, ali radi veoma brzo, jer ne zahteva pomeranje elemenata.