一种片是一个可变长度序列, 用于存储相似类型的元素, 不允许在同一切片中存储不同类型的元素。在”切片”中, 你可以使用copy()函数由Go语言提供。换句话说, 通过copy()函数可以将一个切片的元素复制到另一切片中。
语法如下:
func copy(dst, src []Type) int
这里, dst代表目标切片, 并且src表示源切片。它将返回复制的元素数量, 即最少len(dst)orlen(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是我们尝试复制时的零切片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 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
评论前必须登录!
注册