Un segmento es una secuencia de longitud variable que almacena elementos de un tipo similar, no se permite almacenar diferentes tipos de elementos en el mismo segmento. En Slice, puede copiar un segmento dentro de otro segmento mediante la función copiar() proporcionada por el lenguaje Go. O, en otras palabras, la función copiar() le permite copiar los elementos de un segmento en otro segmento.
Sintaxis:
func copy(dst, src []Type) int
Aquí, dst representa el segmento de destino y src representa el segmento de origen. Devolverá el número de elementos copiados que será el mínimo de len(dst) o len(src) . Discutamos con la ayuda del ejemplo dado:
Ejemplo 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) }
Producción:
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
Explicación: En el ejemplo anterior, tenemos cuatro segmentos de tipo entero y realizamos una operación de copia en ellos:
- copy_1:= copy(slc2, slc1): Aquí, slc2 es el segmento de destino y slc1 es el segmento de origen. Aquí, slc2 es el segmento nulo cuando intentamos copiar el segmento slc1 en el segmento slc2 , luego el método de copia devolverá la longitud mínima del segmento de origen y destino, que es cero para el segmento vacío slc2.
- copy_2:= copy(slc3, slc1): Aquí, slc3 es el segmento de destino y slc1 es el segmento de origen. Aquí, el segmento slc3 es el segmento vacío, por lo que cuando intentamos copiar el segmento slc1 en slc3 usando la función copiar(), copia solo 5 elementos del segmento slc1 comenzando desde el índice 0 porque la longitud de este segmento es 5, por lo que puede no almacenar elementos mayores de 5.
- copy_3:= copy(slc4, slc1): Aquí, slc4 es el segmento de destino y slc1 es el segmento de origen. Cuando tratamos de copiar el segmento slc1 en el segmento slc4 usando la función copiar(), copia solo 4 elementos comenzando desde el índice 0. Debido a que la longitud del segmento slc4 es 4, por lo que no puede almacenar más de 4 elementos.
- copy_4:= copy(slc1, slc4): Aquí, puede confundirse después de su salida. Mira, slc4 se ha actualizado en la línea de código anterior. Así que ahora considere los valores actualizados para slc4 . Entonces ahora slc4 tiene 4 elementos y slc1 tiene 9 elementos. Entonces, el número total de elementos que se copiarán es 4.
Ejemplo 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) }
Producción:
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
Publicación traducida automáticamente
Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA