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.