切片是相似類型的存儲(chǔ)元素,則不允許不同類型的元素的存儲(chǔ)在同一條帶的可變長(zhǎng)度序列。在切片中,您可以使用Go語(yǔ)言提供的copy()函數(shù)將一個(gè)切片復(fù)制到另一個(gè)切片中。換句話說(shuō),通過(guò)copy()函數(shù)可以將一個(gè)切片的元素復(fù)制到另一切片中。
語(yǔ)法:
func copy(dst, src []Type) int
此處,dst表示目標(biāo)切片,而src表示源切片。它將返回要復(fù)制的元素?cái)?shù)量,該數(shù)量應(yīng)為len(dst)或len(src)的最小值。讓我們借助給定的示例演示如何使用:
package main import "fmt" func main() { //創(chuàng)建切片 slc1 := []int{58, 69, 40, 45, 11, 56, 67, 21, 65} var slc2 []int slc3 := make([]int, 5) slc4 := []int{78, 50, 67, 77} //復(fù)制之前 fmt.Println("Slice_1:", slc1) fmt.Println("Slice_2:", slc2) fmt.Println("Slice_3:", slc3) fmt.Println("Slice_4:", slc4) //復(fù)制切片 copy_1 := copy(slc2, slc1) fmt.Println("\nSlice:", slc2) fmt.Println("復(fù)制的元素總數(shù):", copy_1) copy_2 := copy(slc3, slc1) fmt.Println("\nSlice:", slc3) fmt.Println("復(fù)制的元素總數(shù):", copy_2) copy_3 := copy(slc4, slc1) fmt.Println("\nSlice:", slc4) fmt.Println("復(fù)制的元素總數(shù):", copy_3) //這里不要混淆,因?yàn)樵谏厦? //復(fù)制了slc4的代碼行 //并因此進(jìn)行永久修改,即 // slc 4包含[58 69 40 45] copy_4 := copy(slc1, slc4) fmt.Println("\nSlice:", slc1) fmt.Println("復(fù)制的元素總數(shù):", 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: [] 復(fù)制的元素總數(shù): 0 Slice: [58 69 40 45 11] 復(fù)制的元素總數(shù): 5 Slice: [58 69 40 45] 復(fù)制的元素總數(shù): 4 Slice: [58 69 40 45 11 56 67 21 65] 復(fù)制的元素總數(shù): 4
用法說(shuō)明:在上面的示例中,我們有四個(gè)整數(shù)類型切片,并對(duì)它們執(zhí)行復(fù)制操作:
copy 1:= copy(slc2, slc1):在這里,slc2是目標(biāo)片,slc1是源片。這里,當(dāng)我們嘗試在slc2片中復(fù)制slc1片時(shí),slc2是nil切片,那么copy方法將返回源切片和目標(biāo)切片的最小長(zhǎng)度,對(duì)于空切片slc2,最小長(zhǎng)度為0。
copy_2:= copy(slc3,slc1):在這里,slc3是目標(biāo)切片,而slc1是源切片。 此處,slc3切片是空切片,因此當(dāng)我們嘗試使用copy()函數(shù)將slc1切片復(fù)制到slc3時(shí),由于該切片的長(zhǎng)度為5,因此它僅從slc1切片復(fù)制了5個(gè)元素,因?yàn)樵撉衅拈L(zhǎng)度為5,因此可以 不存儲(chǔ)大于5的元素。
copy_3:= copy(slc4,slc1):在這里,slc4是目標(biāo)切片,而slc1是源切片。當(dāng)我們嘗試使用copy()函數(shù)將slc1 slice 復(fù)制到slc4 slice時(shí),它僅從索引0開始復(fù)制其中的4個(gè)元素。由于slc4 切片 的長(zhǎng)度為4,因此它不能存儲(chǔ)大于4的元素。
copy_4:= copy(slc1,slc4):在這里,輸出后可能會(huì)感到困惑。 請(qǐng)參見,上面的代碼行中的slc4已更新。 因此,現(xiàn)在考慮slc4的更新值。 因此,現(xiàn)在slc4具有4個(gè)元素,而slc1具有9個(gè)元素。 因此,將要復(fù)制的元素總數(shù)為4。
范例2:
package main import "fmt" func main() { //源切片 slice_1 := []string{"nhooos", "for", "nhooos", "GFG"} //創(chuàng)建目標(biāo)切片,使用make函數(shù) slice_2 := make([]string, 3) //復(fù)制前 fmt.Println("Slice_1: ", slice_1) fmt.Println("Slice_2: ", slice_2) //將slice_1復(fù)制到slice_2 Copy_1 := copy(slice_2, slice_1) fmt.Println("\nSlice_1: ", slice_1) fmt.Println("Slice_2: ", slice_2) fmt.Println("復(fù)制的元素?cái)?shù): ", Copy_1) //復(fù)制切片 //使用復(fù)制功能 //清楚地看到代碼 Copy_2 := copy(slice_1, []string{"123nhooos", "gfg"}) fmt.Println("\nSlice_1 : ", slice_1) fmt.Println("復(fù)制的元素?cái)?shù):", Copy_2) }
輸出:
Slice_1: [nhooos for nhooos GFG] Slice_2: [ ] Slice_1: [nhooos for nhooos GFG] Slice_2: [nhooos for nhooos] 復(fù)制的元素?cái)?shù): 3 Slice_1: [123nhooos gfg nhooos GFG] 復(fù)制的元素?cái)?shù): 2