如何在Golang中将一个切片复制到另一个切片中()

一种片是一个可变长度序列, 用于存储相似类型的元素, 不允许在同一切片中存储不同类型的元素。在” 切片” 中, 你可以使用copy()函数由Go语言提供。换句话说, 通过copy()函数可以将一个切片的元素复制到另一切片中。
语法如下:

func copy(dst, src []Type) int

这里, dst代表目标切片, 并且src表示源切片。它将返回复制的元素数量, 即最少len(dst)orlen(src)。让我们借助给定的示例进行讨论:
【如何在Golang中将一个切片复制到另一个切片中()】范例1:
// Go program to illustrate how to copy // a slice into another slice using the // copy function package mainimport "fmt"// Main Method func main() {// Creating slices slc1 := [] int {58, 69, 40, 45, 11, 56, 67, 21, 65} var slc2 [] int slc3 := make([] int , 5) slc4 := [] int {78, 50, 67, 77}// Before copying fmt.Println( "Slice_1:" , slc1) fmt.Println( "Slice_2:" , slc2) fmt.Println( "Slice_3:" , slc3) fmt.Println( "Slice_4:" , slc4)// Copying the slices copy_1 := copy(slc2, slc1) fmt.Println( "\nSlice:" , slc2) fmt.Println( "Total number of elements copied:" , copy_1)copy_2 := copy(slc3, slc1) fmt.Println( "\nSlice:" , slc3) fmt.Println( "Total number of elements copied:" , copy_2)copy_3 := copy(slc4, slc1) fmt.Println( "\nSlice:" , slc4) fmt.Println( "Total number of elements copied:" , copy_3)// Don't confuse here, because in above // line of code the slc4 has been copied // and hence modified permanently i.e. // slc 4 contains [58 69 40 45] copy_4:= copy(slc1, slc4) fmt.Println( "\nSlice:" , slc1) fmt.Println( "Total number of elements copied:" , 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: [] Total number of elements copied: 0Slice: [58 69 40 45 11] Total number of elements copied: 5Slice: [58 69 40 45] Total number of elements copied: 4Slice: [58 69 40 45 11 56 67 21 65] Total number of elements copied: 4

说明:在上面的示例中, 我们有四个整数类型切片, 并对它们执行复制操作:
  • copy_1:=copy(slc2, slc1):这里, slc2是目标切片, 并且slc1是源切片。这里, slc2是我们尝试复制时的零切片slc1切入slc2切片, 然后复制方法将返回源切片和目标切片的最小长度, 对于空切片slc2, 该长度为零。
  • copy_2:=copy(slc3, slc1):这里, slc3是目标切片, 并且slc1是源切片。在这里slc3slice是空切片, 因此当我们尝试复制时slc1切成slc3使用copy()函数, 它仅从中复制5个元素slc1从索引0开始的切片, 因为此切片的长度为5, 所以它不能存储大于5的元素。
  • copy_3:=copy(slc4, slc1):这里, slc4是目标切片, 并且slc1是源切片。当我们尝试复制slc1切成slc4slice使用copy()函数从索引0开始仅复制4个元素。因为slc4slice是4, 因此不能存储超过4个元素。
  • copy_4:=copy(slc1, slc4):在这里, 你可能会对它的输出感到困惑。看到, slc4上面的代码行已更新。所以现在考虑更新的值slc4。所以现在slc4有4个元素和slc1有9个元素。因此, 将要复制的元素总数为4。
范例2:
// Go program to illustrate how to copy // a slice into another slice using the // copy function package mainimport "fmt"func main() {// source slice slice_1 := []string{ "Geeks" , "for" , "Geeks" , "GFG" }// creating destination slice // using make function slice_2 := make([]string, 3)// Before Copying fmt.Println( "Slice_1: " , slice_1) fmt.Println( "Slice_2: " , slice_2)// Copying slice_1 into slice_2 // using copy function Copy_1 := copy(slice_2, slice_1) fmt.Println( "\nSlice_1: " , slice_1) fmt.Println( "Slice_2: " , slice_2) fmt.Println( "Number of elements copied: " , Copy_1)// Copying the slice // using copy function // see the code clearly Copy_2 := copy(slice_1, []string{ "123geeks" , "gfg" }) fmt.Println( "\nSlice_1 : " , slice_1) fmt.Println( "Number of elements copied:" , Copy_2)}

输出如下:
Slice_1:[Geeks for Geeks GFG] Slice_2:[]Slice_1:[Geeks for Geeks GFG] Slice_2:[Geeks for Geeks] Number of elements copied:3Slice_1:[123geeks gfg Geeks GFG] Number of elements copied: 2

    推荐阅读