¿Cómo copiar un segmento en otro segmento en Golang?

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *