es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué la operación de añadir una rebanada de elemento no actualiza el elemento referenciado?

Esta regla es lo que sé sobre las “slices” en Go:

  • Cuando el número de elementos y la capacidad son iguales (len(fruits) == cap(fruits)), el nuevo elemento agregado con append() es una nueva referencia.
  • Cuando el número de elementos es menor que la capacidad (len(fruits) < cap(fruits)), el nuevo elemento se coloca en la capacidad disponible, lo que hace que los demás elementos con la misma referencia cambien de valor.

Tengo code como este:

package main

import (
    "fmt"
)

func main() {
    //declarar una "slice"
    var fruits = []string{"banana", "mango", "tomato"}

<pre><code>//usando la técnica de dos índices para hacer una "slice"
var newFruits = fruits[1:2]

//agregar un elemento a la "slice" fruits
fruits = append(fruits, "papaya")

//agregar un elemento a la "slice" newFruits
newFruits = append(newFruits, "dragon")

fmt.Println(cap(fruits)) //2
fmt.Println(cap(newFruits)) //6
fmt.Println(newFruits) //[mango dragon]
fmt.Println(fruits) //[banana mango tomato papaya]
</code></pre>

}

¿Por qué el valor de fruits no es [banana mango dragon papaya]?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El valor de las frutas no es [banana mango dragon papaya] porque al crear la nueva rebanada (slice) de frutas usando la técnica de dos índices, todavía hace referencia al mismo arreglo subyacente que la rebanada original de frutas. Cuando se agrega un nuevo elemento a la rebanada nuevaFruits, aumenta su longitud pero no su capacidad. Dado que la rebanada original de frutas ya ha alcanzado su capacidad de 3 elementos, se asigna un nuevo arreglo con una capacidad mayor cuando se agrega “papaya” a esta. Por lo tanto, la rebanada original de frutas y la nuevaFruits tienen diferentes arreglos subyacentes y agregar un elemento a nuevaFruits no afecta la rebanada de frutas.

Comments are closed.