背景
从数组中删除一个元素是开发中经常会遇到的问题,今天探讨一下golang中有哪些优雅的删除方法
方案
方案一:移动法
思路:直接删除指定位置的元素,后面的元素依次往前移动一位
该方法保证了元素的顺序,但是如果数组过大的话,移动的代价较大,影响效率
func remove2(s []int, i int) []int {
if i < 0 || i >= len(s) {
return s
}
s[i] = s[len(s)-1]
s=append(s[:i],s[i+1:]...)
return s
}
方案二:替换法
思路:将要删除的元素和数组的最后一个元素替换,然后数组的长度-1
该方法删除后不能保证之前的元素顺序,适合于对顺序不敏感的使用场景
func remove(s []int, i int) []int {
if i < 0 || i >= len(s) {
return s
}
s[i] = s[len(s)-1]
return s[:len(s)-1]
}
方案二:置0法
思路: 如果既不想改变数组中元素的顺序,也不想大面积移动元素,那么可以考虑将数组中元素用特殊元素替换的方式,例如,将元素用0或者-1替换的方式,后面判断的时候只需要判断元素的反特征进行遍历