Go 语言切片复制
切片是相似类型的存储元素,则不允许不同类型的元素的存储在同一条带的可变长度序列。在切片中,您可以使用Go语言提供的copy()函数将一个切片复制到另一个切片中。换句话说,通过copy()函数可以将一个切片的元素复制到另一切片中。
语法:
func copy(dst, src []Type) int
此处,dst表示目标切片,而src表示源切片。它将返回要复制的元素数量,该数量应为len(dst)或len(src)的最小值。让我们借助给定的示例演示如何使用:
package main import "fmt" func main() { //创建切片 slc1 := []int{58, 69, 40, 45, 11, 56, 67, 21, 65} var slc2 []int slc3 := make([]int, 5) slc4 := []int{78, 50, 67, 77} //复制之前 fmt.Println("Slice_1:", slc1) fmt.Println("Slice_2:", slc2) fmt.Println("Slice_3:", slc3) fmt.Println("Slice_4:", slc4) //复制切片 copy_1 := copy(slc2, slc1) fmt.Println("\nSlice:", slc2) fmt.Println("复制的元素总数:", copy_1) copy_2 := copy(slc3, slc1) fmt.Println("\nSlice:", slc3) fmt.Println("复制的元素总数:", copy_2) copy_3 := copy(slc4, slc1) fmt.Println("\nSlice:", slc4) fmt.Println("复制的元素总数:", copy_3) //这里不要混淆,因为在上面 //复制了slc4的代码行 //并因此进行永久修改,即 // slc 4包含[58 69 40 45] copy_4 := copy(slc1, slc4) fmt.Println("\nSlice:", slc1) fmt.Println("复制的元素总数:", copy_4) }
输出:
Slice_1: [58 69 40 45 11 56 67 21 65] Slice_2: [] Slice_3: [0 0 0 0 0] Slice_4: [78 50 67 77] Slice: [] 复制的元素总数: 0 Slice: [58 69 40 45 11] 复制的元素总数: 5 Slice: [58 69 40 45] 复制的元素总数: 4 Slice: [58 69 40 45 11 56 67 21 65] 复制的元素总数: 4
用法说明:在上面的示例中,我们有四个整数类型切片,并对它们执行复制操作:
copy 1:= copy(slc2, slc1):在这里,slc2是目标片,slc1是源片。这里,当我们尝试在slc2片中复制slc1片时,slc2是nil切片,那么copy方法将返回源切片和目标切片的最小长度,对于空切片slc2,最小长度为0。
copy_2:= copy(slc3,slc1):在这里,slc3是目标切片,而slc1是源切片。 此处,slc3切片是空切片,因此当我们尝试使用copy()函数将slc1切片复制到slc3时,由于该切片的长度为5,因此它仅从slc1切片复制了5个元素,因为该切片的长度为5,因此可以 不存储大于5的元素。
copy_3:= copy(slc4,slc1):在这里,slc4是目标切片,而slc1是源切片。当我们尝试使用copy()函数将slc1 slice 复制到slc4 slice时,它仅从索引0开始复制其中的4个元素。由于slc4 切片 的长度为4,因此它不能存储大于4的元素。
copy_4:= copy(slc1,slc4):在这里,输出后可能会感到困惑。 请参见,上面的代码行中的slc4已更新。 因此,现在考虑slc4的更新值。 因此,现在slc4具有4个元素,而slc1具有9个元素。 因此,将要复制的元素总数为4。
范例2:
package main import "fmt" func main() { //源切片 slice_1 := []string{"nhooos", "for", "nhooos", "GFG"} //创建目标切片,使用make函数 slice_2 := make([]string, 3) //复制前 fmt.Println("Slice_1: ", slice_1) fmt.Println("Slice_2: ", slice_2) //将slice_1复制到slice_2 Copy_1 := copy(slice_2, slice_1) fmt.Println("\nSlice_1: ", slice_1) fmt.Println("Slice_2: ", slice_2) fmt.Println("复制的元素数: ", Copy_1) //复制切片 //使用复制功能 //清楚地看到代码 Copy_2 := copy(slice_1, []string{"123nhooos", "gfg"}) fmt.Println("\nSlice_1 : ", slice_1) fmt.Println("复制的元素数:", Copy_2) }
输出:
Slice_1: [nhooos for nhooos GFG] Slice_2: [ ] Slice_1: [nhooos for nhooos GFG] Slice_2: [nhooos for nhooos] 复制的元素数: 3 Slice_1: [123nhooos gfg nhooos GFG] 复制的元素数: 2