Junior — Middle
Как ефективно да премахнете елемент от слайс, без да запазвате реда на елементите, като същевременно не надвишавате постоянната сложност на операцията?
sobes.tech AI
Отговор от AI
Ако искате да премахнете елемент от срез в Go без да запазвате реда на елементите и с операция с постоянна сложност O(1), можете да замените премахвания елемент с последния елемент от среза и след това да съкратите среза с един.
Пример:
func removeUnordered(s []int, i int) []int {
s[i] = s[len(s)-1] // заменя елемента i с последния
return s[:len(s)-1] // съкращава среза
}
// Използване:
s := []int{10, 20, 30, 40, 50}
s = removeUnordered(s, 1) // премахва елемента с индекс 1 (20)
// Сега s може да бъде, например, [10, 50, 30, 40]
Този метод не запазва реда на елементите, но работи много бързо, тъй като не изисква преместване на елементи.