golang中删除切片中的元素

一世执手 提交于 2020-08-14 20:22:59

背景

从数组中删除一个元素是开发中经常会遇到的问题,今天探讨一下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替换的方式,后面判断的时候只需要判断元素的反特征进行遍历

参考

https://stackoverflow.com/questions/37334119/how-to-delete-an-element-from-a-slice-in-golang

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!