Go语言中并没有提供内置函数来删除切片,熟悉Java/PHP的都知道,在Java/PHP中都提供对list或数组的filter
操作,那么在Go语言中就需要多用几行代码来实现删除切片中的指定元素了。
循环截取法
假设有个1~9的数组,要删除掉其中的偶数,那么这里先进行for
循环,依次判断元素是否为偶数,然后将偶数的元素通过索引截取掉,下标i
向左移动一位。
numbers := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
for i := 0; i < len(numbers); i++ {
if numbers[i]%2 == 0 { // 如果是偶数就删除
// 通过截取删除
numbers = append(numbers[:i], numbers[i+1:]...)
i--
}
}
fmt.Println(numbers) // [1 3 5 7 9]
移位覆盖法
同样是1~9的数组,通过遍历,将不需要删除的元素依次在原来的数组上覆盖原有元素。最后只截取前面j
个有效元素即可。
numbers := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
j := 0
for _, num := range numbers {
if num%2 == 0 { // 如果是偶数就删除
continue
}
numbers[j] = num
j++
}
fmt.Println(numbers[:j]) // [1 3 5 7 9]
最后,推荐使用第二种方法,性能更好。