前言:我们知道,golang没为slice提供insert。而如果直接使用[start:end]拼接,会对原slice产生影响。下面就说一下如何实现insert
思路
- 创建一个新的切片 newSlice,长度为原有切片 slice 的长度加1。
- 将 newSlice 的前半部分与插入元素之前的部分复制自原有切片 slice。
- 插入要添加的元素到 newSlice的指定位置。
- 将 newSlice 的后半部分与插入元素之后的部分复制自原有切片 slice。
- 此时, newSlice 即为插入元素后的切片。
代码实现
/*
*@slice :原来的数组
*@index:插入的位置
*@value:插入的值
*/
package main
import "fmt"
func insertSlice(slice []int, index int, value int) []int {
// 确保插入位置在有效范围内
if index < 0 || index > len(slice) {
fmt.Println("Invalid index for insertion")
return slice
}
// 创建新的切片,长度为原有切片长度加1
newSlice := make([]int, len(slice)+1)
// 将前半部分复制自原有切片
copy(newSlice[:index], slice[:index])
// 插入要添加的元素
newSlice[index] = value
// 将后半部分复制自原有切片
copy(newSlice[index+1:], slice[index:])
return newSlice
}
func main() {
slice := []int{1, 2, 3, 4, 5}
// 在索引为2的位置插入元素6
newSlice := insertSlice(slice, 2, 6)
fmt.Println(newSlice) // 输出:[1 2 6 3 4 5]
}