Как удалять элементы из слайса?

Junior
2.3k просмотров
AFK Offer AI

С сохранением порядка: s = append(s[:i], s[i+1:]...) — сдвигает элементы, O(n). Без сохранения порядка: s[i] = s[len(s)-1]; s = s[:len(s)-1] — O(1), свапаешь с последним и обрезаешь.

С Go 1.21 есть slices.Delete(s, i, j). Важно: при удалении по указателю — обнули удалённый элемент, чтобы GC мог собрать: s[len(s)-1] = nil (для слайсов указателей).

Удаление в цикле — итерируй с конца, иначе пропустишь элементы.

Следующий вопрос

Как работает сборщик мусора в Go?