访问、更改、附加和复制切片
访问切片的元素
您可以通过引用索引号来访问特定的切片元素。
在 Go 中,索引从 0 开始。这意味着 [0] 是第一个元素,[1] 是第二个元素,等等。
例子
此示例显示如何访问价格切片中的第一个和第三个元素:
软件包 main
导入(“fmt”)
函数main(){
价格:= []int{10,20,30}
fmt.Println(价格[0])
fmt.Println(价格[2])
}
结果:
10
30
更改切片的元素
您还可以通过引用索引号来更改特定的切片元素。
例子
此示例显示如何更改价格切片中的第三个元素:
软件包 main
导入(“fmt”)
函数main(){
价格:= []int{10,20,30}
价格[2] = 50
fmt.Println(价格[0])
fmt.Println(价格[2])
}
结果:
10
50
将元素附加到切片
您可以使用以下方式将元素附加到切片的末尾: append()
功能:
句法
切片名称 =追加(切片名称, 元素1, 元素2, ...)
例子
此示例显示如何将元素附加到切片的末尾:
软件包 main
导入(“fmt”)
函数main(){
myslice1 := []int{1, 2, 3, 4, 5, 6}
fmt.Printf("myslice1 = %v\n", myslice1)
fmt.Printf("长度 = %d\n", len(myslice1))
fmt.Printf("容量 = %d\n", cap(myslice1))
myslice1 = 附加 (myslice1, 20, 21)
fmt.Printf("myslice1 = %v\n", myslice1)
fmt.Printf("长度 = %d\n", len(myslice1))
fmt.Printf("容量 = %d\n", cap(myslice1))
}
结果:
myslice1 = [1 2 3 4 5 6]
length = 6
capacity = 6
myslice1 = [1 2 3 4 5 6 20 21]
length = 8
capacity = 12
将一个切片附加到另一个切片
要将一个切片的所有元素附加到另一个切片,请使用 append()
功能:
句法
切片3 =追加(切片1, 切片2...)
笔记: 这'...' 后切片2 是必要的 将一个切片的元素附加到另一个切片时。
例子
此示例显示如何将一个切片附加到另一个切片:
软件包 main
导入(“fmt”)
函数main(){
myslice1 := []int{1,2,3}
myslice2 := []int{4,5,6}
myslice3 := append(myslice1, myslice2...)
fmt.Printf("myslice3=%v\n", myslice3)
fmt.Printf("length=%d\n", len(myslice3))
fmt.Printf("容量=%d\n", cap(myslice3))
}
结果:
myslice3=[1 2 3 4 5 6]
length=6
capacity=6
更改切片的长度
与数组不同,切片的长度可以改变。
例子
此示例显示如何更改切片的长度:
软件包 main
导入(“fmt”)
函数main(){
arr1 := [6]int{9, 10, 11, 12, 13, 14} // 一个数组
myslice1 := arr1[1:5] // 切片数组
fmt.Printf("myslice1 = %v\n", myslice1)
fmt.Printf("长度 = %d\n", len(myslice1))
fmt.Printf("容量 = %d\n", cap(myslice1))
myslice1 = arr1[1:3] // 通过重新切片数组来改变长度
fmt.Printf("myslice1 = %v\n", myslice1)
fmt.Printf("长度 = %d\n", len(myslice1))
fmt.Printf("容量 = %d\n", cap(myslice1))
myslice1 = append(myslice1, 20, 21, 22, 23) // 通过附加项目来更改长度
fmt.Printf("myslice1 = %v\n", myslice1)
fmt.Printf("长度 = %d\n", len(myslice1))
fmt.Printf("容量 = %d\n", cap(myslice1))
}
结果:
myslice1 = [10 11 12 13]
length = 4
capacity = 5
myslice1 = [10 11]
length = 2
capacity = 5
myslice1 = [10 11 20 21 22 23]
length = 6
capacity = 10
内存效率
当使用切片时,Go 会将所有底层元素加载到内存中。
如果数组很大,而你只需要几个元素,那么最好使用 copy()
功能。
这 copy()
函数创建一个新的底层数组,其中仅包含切片所需的元素。这将减少程序使用的内存。
句法
复制(目的地, 源码)
这 copy()
函数接受两个切片目的地 和源码,并从中复制数据 源码 到目的地. 它返回复制的元素的数量。
例子
此示例说明如何使用 copy()
功能:
软件包 main
导入(“fmt”)
函数main(){
数字 := []int{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}
// 原始切片
fmt.Printf("数字 = %v\n", 数字)
fmt.Printf("长度 = %d\n", len(数字))
fmt.Printf("容量 = %d\n", cap(数字))
// 仅使用需要的数字创建副本
需要的数字:=数字[:len(数字)-10]
numbersCopy := make([]int, len(neededNumbers))
复制(numbersCopy,neededNumbers)
fmt.Printf("numbersCopy = %v\n",numbersCopy)
fmt.Printf("长度 = %d\n", len(numbersCopy))
fmt.Printf("容量 = %d\n", cap(numbersCopy))
}
结果:
// Original slice
numbers = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
length = 15
capacity = 15
// New slice
numbersCopy = [1 2 3 4 5]
length = 5
capacity = 5
新切片的容量现在小于原始切片的容量,因为新的底层数组较小。