切片是相似类型的存储元素,则不允许不同类型的元素的存储在同一条带的可变长度序列。在切片中,您可以使用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{"sfjvips", "for", "sfjvips", "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{"123sfjvips", "gfg"})
fmt.Println("\nSlice_1 : ", slice_1)
fmt.Println("复制的元素数:", Copy_2)
}
输出:
Slice_1: [sfjvips for sfjvips GFG]
Slice_2: [ ]
Slice_1: [sfjvips for sfjvips GFG]
Slice_2: [sfjvips for sfjvips]
复制的元素数: 3
Slice_1: [123sfjvips gfg sfjvips GFG]
复制的元素数: 2