golang数组append切片添加
package main
import "fmt"
func main() {
a := []int{1, 2, 3}
a = append(a, 1) // 追加1个元素
a = append(a, 1, 2, 3) // 追加多个元素, 手写解包方式
a = append(a,[]int{11,11,11}...) // 追加一个切片, 切片需要解包
a = append([]int{22,22,22},a...) // 在开头添加1个切片
a = append(a[:0], append([]int{1,2,3}, a[0:]...)...) // 在第0个位置插入切片
fmt.Println(a)
for i:=0;i<len(a);i++{
fmt.Println(a[i])
}
}
golang数组删除元素
1.从开头位置删除
package main
import "fmt"
func main() {
//删除开头的元素可以直接移动数据指针:
a := []int{1, 2, 3}
a = a[1:] // 删除开头1个元素
a = a[N:] // 删除开头N个元素
fmt.Println(a)
//也可以不移动数据指针,但是将后面的数据向开头移动,可以用 append 原地完成
//(所谓原地完成是指在原有的切片数据对应的内存区间内完成,不会导致内存空间结构的变化):
a = []int{1, 2, 3}
a = append(a[:0], a[1:]...) // 删除开头1个元素
a = append(a[:0], a[N:]...) // 删除开头N个元素
//还可以用 copy() 函数来删除开头的元素:
a = []int{1, 2, 3, ...}
a = append(a[:i], a[i+1:]...) // 删除中间1个元素
a = append(a[:i], a[i+N:]...) // 删除中间N个元素
a = a[:i+copy(a[i:], a[i+1:])] // 删除中间1个元素
a = a[:i+copy(a[i:], a[i+N:])] // 删除中间N个元素
}
2.从中间位置删除
func main() {
//对于删除中间的元素,需要对剩余的元素进行一次整体挪动,同样可以用 append 或 copy 原地完成:
a = []int{1, 2, 3, ...}
a = append(a[:i], a[i+1:]...) // 删除中间1个元素
a = append(a[:i], a[i+N:]...) // 删除中间N个元素
a = a[:i+copy(a[i:], a[i+1:])] // 删除中间1个元素
a = a[:i+copy(a[i:], a[i+N:])] // 删除中间N个元素
}
3.从尾部删除
func main() {
a = []int{1, 2, 3}
a = a[:len(a)-1] // 删除尾部1个元素
a = a[:len(a)-N] // 删除尾部N个元素
}
网友评论