go切片在指定位置插入元素

在 Go 语言中,append 函数用于向切片(slice)追加元素。它是内建的函数,用于在切片的末尾添加一个或多个元素,并返回新的切片。

append 函数的基本语法如下:

newSlice := append(slice, element1, element2, ...)

其中:

slice:要追加元素的切片。
element1, element2, …:要追加到切片的元素。
append 函数可以追加一个或多个元素到切片中。如果追加的元素超过了切片的容量,append 函数会自动分配更大的底层数组来容纳新的元素。

以下是一些关于 append 函数的重要特点和注意事项:

append 函数返回一个新的切片,而不会修改原始的切片。因此,通常需要将返回的新切片赋值给原始切片。

如果原始切片的容量足够,append 函数将直接向原始切片追加元素。这种情况下,新切片和原始切片将共享相同的底层数组。

如果原始切片的容量不足,append 函数将创建一个新的底层数组,并将原始切片的元素复制到新数组中,然后再追加新的元素。这种情况下,新切片将使用新的底层数组。

当使用 append 函数追加切片到另一个切片时,可以使用 … 语法将切片打散为单独的元素。例如:newSlice := append(slice1, slice2…)。

append 函数还可以用于创建一个新的切片,而不需要给定初始切片。例如:newSlice := append([]int{}, 1, 2, 3)。

下面是一些使用 append 函数的示例:

func main() {
	slice := []int{1, 2, 3}
	
	// 向切片追加一个元素
	newSlice := append(slice, 4)
	fmt.Println(newSlice) // 输出: [1 2 3 4]
	
	// 向切片追加多个元素
	anotherSlice := append(slice, 4, 5, 6)
	fmt.Println(anotherSlice) // 输出: [1 2 3 4 5 6]
	
	// 将一个切片追加到另一个切片
	slice2 := []int{4, 5, 6}
	combinedSlice := append(slice, slice2...)
	fmt.Println(combinedSlice) // 输出: [1 2 3 4 5 6]
}

在上述示例中,我们演示了使用 append 函数向切片追加元素。第一个示例追加了一个元素到切片 slice 中,创建了一个新的切片 newSlice。第二个示例追加了多个元素到切片 slice 中,创建了另一个新的切片 anotherSlice。第三个示例将一个切片 slice2 追加到切片 slice 的末尾,创建了一个合并后的切片 combinedSlice。

从上面可以看到,切片使用append在末尾插入,但是没有insert这样方法在指定位置插入,需要执行如下几步:

package main

import "fmt"

func main() {
	a := []int{1, 2, 3, 4, 5}
	a = append(a, 0) //先把切片长度+1
	fmt.Println(a)
	index := 2 //需要插入的位置
	copy(a[index+1:], a[index:])
	fmt.Println(a)
	a[index] = 100
	fmt.Println(a)
}

输出为:

[1 2 3 4 5 0]
[1 2 3 3 4 5]  
[1 2 100 3 4 5]

也可以通过自定义insert函数:

package main

import "fmt"

func main() {
	slice := []int{1, 2, 3, 4, 5}
	index := 2
	value := 99

	newSlice := insertSlice(slice, index, value)
	fmt.Println(newSlice) // 输出: [1 2 99 3 4 5]
}
func insertSlice(slice []int, index int, value int) []int {
	// 创建一个新的切片,长度比原切片多1
	newSlice := make([]int, len(slice)+1)

	// 将原切片的前半部分复制到新切片
	copy(newSlice[:index], slice[:index])

	// 在指定位置插入元素
	newSlice[index] = value

	// 将原切片的后半部分复制到新切片
	copy(newSlice[index+1:], slice[index:])

	return newSlice
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值