Slice 是一个可变长度的序列,它存储相似类型的元素,不允许在同一个切片中存储不同类型的元素。在 Slice 中,您可以使用 Go 语言提供的copy()函数将一个切片复制到另一个切片中。或者换句话说, copy()函数允许您将一个切片的元素复制到另一个切片中。
句法:
func copy(dst, src []Type) int
这里, dst代表目标切片, src代表源切片。它将返回复制的元素数量,该数量将是len(dst)或len(src) 中的最小值。让我们借助给定的示例进行讨论:
示例 1:
// Go program to illustrate how to copy
// a slice into another slice using the
// copy function
package main
import "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: 0
Slice: [58 69 40 45 11]
Total number of elements copied: 5
Slice: [58 69 40 45]
Total number of elements copied: 4
Slice: [58 69 40 45 11 56 67 21 65]
Total number of elements copied: 4
说明:在上面的例子中,我们有四个整数类型的切片,我们对它们执行复制操作:
- copy_1:= copy(slc2, slc1):这里, slc2是目标切片, slc1是源切片。在这里,SLC2是零片,当我们尝试在SLC2片复制SLC1切片,然后复制方法将返回最小源和目的地片的长度,它是一个零空片SLC2。
- copy_2:= copy(slc3, slc1):这里, slc3是目标切片, slc1是源切片。这里, slc3切片是空切片,因此当我们尝试使用 copy()函数将slc1切片复制到slc3 时,它只从索引 0 开始从slc1切片复制 5 个元素,因为该切片的长度为 5,因此它可以不存储大于 5 的元素。
- copy_3:= copy(slc4, slc1):这里, slc4是目标切片, slc1是源切片。当我们尝试使用 copy()函数将slc1切片复制到slc4切片时,它只复制其中的 4 个元素,从索引 0 开始。 由于slc4切片的长度为 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 main
import "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: 3
Slice_1: [123geeks gfg Geeks GFG]
Number of elements copied: 2