go slice切片的删除、插入操作

 基础语法  2022-05-01  admin  554  747

go slice切片的删除、插入操作

// SliceRemove 删除切片指定位置的元素
func SliceRemove(s []string, i int) []string {
	if i >= len(s) {
		return s
	}
	//return append(s[:i], s[i+1:]...)  // 会导致s改变
	return append(append([]string{}, s[:i]...), s[i+1:]...)
}

// SliceRemove2 删除切片指定位置的元素
func SliceRemove2(s []string, i int) []string {
	if i >= len(s) {
		return s
	}

	s2 := make([]string, len(s)-1)
	n := 0
	for k, v := range s {
		if k == i {
			continue
		}
		s2[n] = v
		n++
	}
	return s2
}

// SliceRemoveMany 删除切片指定位置的多个元素
func SliceRemoveMany(s []string, i int, j int) []string {
	if i >= len(s) {
		return s
	}
	return append(append([]string{}, s[:i]...), s[j:]...)
}

// SliceRemoveMany2 删除切片指定位置的多个元素
func SliceRemoveMany2(s []string, i int, j int) []string {
	if i >= len(s) {
		return s
	}

	s2 := make([]string, len(s)-(j-i))
	n := 0
	for k, v := range s {
		if k >= i && k < j {
			continue
		}
		s2[n] = v
		n++
	}
	return s2
}

// SliceInsert 在切片的指定位置插入切片
func SliceInsert(s []string, i int, val []string) []string {
	return append(s[:i], append(val, s[i:]...)...)
}

// SliceInsert2 在切片的指定位置插入切片
func SliceInsert2(s []string, i int, val []string) []string {
	if i >= len(s) {
		return s
	}

	s2 := make([]string, len(s)+len(val))
	n := 0
	for k, v := range s {
		if k == i {
			for _, v2 := range val {
				s2[n] = v2
				n++
			}
		}
		s2[n] = v
		n++
	}
	return s2
}


如果文章对您有帮助,点击下方的广告,支持一下作者吧!

转载必须注明出处:

go slice切片的删除、插入操作 —— code.cent123.com

相关推荐


Go 切片面试真题八连问

原文:https://mp.weixin.qq.com/s/Qo_DNAAcamXXwU9ihrY6jA前言哈喽,大家好,我是asong。最近没事在看八股文,总结了几道常考的切片八股文,以问答的方式总结出来,希望对正在面试的你们有用~本文题目不全,关于切片的面试真题还有哪些?欢迎评论区补充~01. 数组和切片有什么区别?Go语言中数组是固定长度的,不能动态扩容,在编译期就会确定大小,声明方式如下:

go 的基本数据类型,值类型 引用类型

类型长度(字节)默认值说明bool1false一个字节,值是true或者false,不可以用0或者1表示byte10byte占用8位,一个字节,相当于uint8,不带符号位rune40Unicode Code Point, int32等价于int32类型。int, uint4或8032 或 64 位,根据平台不同是32位或者64位int8, uint810-128 ~ 127, 0 ~ 255,b

go遍历过程中用 value 取不到 collection 的指针地址

go遍历过程中用 value 取不到 collection 的指针地址for-range 其实是语法糖,内部调用还是 for 循环,初始化会拷贝带遍历的列表(如 array,slice,map)。每次遍历的 value 地址是不变的,若用 value 去地址,最终只会拿到一个地址。但换个方式还是可以取到地址的。packagemain import&quot;fmt&quot; fun

go 高性能转换[]byte 和 string

高性能转换[]byte 和 string//这l两个函数是从网上找到的,高频函数使用时性能确实好。原因主要是使用底层指针减少内存 op(内存申请)。//StringToBytesconvertsstringtobyteslicewithoutamemoryallocation. funcStringToBytes(sstring)(b[]byte){ sh:=*(*reflect.Strin