English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
切片是相似类型的存储元素,则不允许不同类型的元素的存储在同一条带的可变长度序列。在切片中,您可以使用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 является исходным срезом. Здесь, при попытке скопировать срез slc1 в slc2, если slc2 является nil срезом, то метод copy возвращает минимальную длину между исходным и целевым срезами, для пустого среза slc2 минимальная длина составляет 0.
copy_2 := copy(slc3, slc1); здесь, slc3 является целевым срезом, а slc1 является исходным срезом. Здесь, slc3切片 является пустым切片ом, поэтому при попытке использовать функцию copy() для копирования среза slc1 в slc3, так как длина этого среза составляет 5, он копирует только 5 элементов из среза slc1, так как длина среза составляет 5, поэтому можно не хранит элементов, превышающих 5.
copy_3 := copy(slc4,slc1):здесь,slc4является целевым разрезом, аslc1является исходным разрезом. Когда мы пытаемся использовать функцию copy() для копированияslc1 Разрез копируется вslc4 Разрез, он копирует только 4 элемента, начинающиеся с индекса 0. Из-заslc4 Длина разреза составляет 4, поэтому он не может хранить элементы, превышающие 4.
copy_4 := copy(slc1,slc4):Здесь, после вывода может возникнуть путаница. См.上面的 строки кода, где slc4 был обновлен. Таким образом, теперь consider slc4 обновленную стоимость. Таким образом, теперь slc4 имеет 4 элемента, а slc1 имеет 9 элементов. Таким образом, общее количество элементов для копирования составляет 4.
Пример 2:
package main import "fmt" func main() { //Исходный разрез slice_1 := []string{"w3codeboxs", "for", "w3codeboxs", "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{"123w3codeboxs", "gfg"}) fmt.Println("\nSlice_1 : ", slice_1) fmt.Println("Количество скопированных элементов:", Copy_2) }
Результат:
Slice_1: [w3codeboxs for w3codeboxs GFG] Slice_2: [ ] Slice_1: [w3codeboxs for w3codeboxs GFG] Slice_2: [w3codeboxs for w3codeboxs] Количество скопированных элементов: 3 Slice_1: [123w3codeboxs gfg w3codeboxs GFG] Количество скопированных элементов: 2