Удаление по значению в Go
Число можно убрать из среза, если известно само значение, а не номер. Готовой одной команды без перебора здесь нет: сначала ищут индекс циклом, затем удаляют диапазон или собирают новый ряд без этого значения.
Найдем 20 перебором и удалим через пакет slices:
nums := []int{10, 20, 30}
idx := -1
for i := 0; i < len(nums); i++ {
if nums[i] == 20 {
idx = i
break
}
}
if idx >= 0 {
nums = slices.Delete(nums, idx, idx+1)
}
fmt.Println(nums)
На экране 10 и 30. Если значение не найдено, цикл оставит idx равным -1 и срез не изменится.
Тот же результат можно собрать новым срезом: на каждом круге добавляют элемент, только если он не равен искомому числу.
Дан следующий срез:
nums := []int{1, 2, 3}
Уберите 2: найдите индекс циклом и удалите участок через пакет slices.
Дан следующий срез:
nums := []int{5, 7, 5}
Соберите в clean новый срез без 5, добавляя в конец только другие значения.
Скажите, зачем после поиска проверять, что индекс не отрицательный.