【问题标题】:Why slice append element not update referenced element?为什么切片追加元素不更新引用的元素?
【发布时间】:2022-01-06 21:59:17
【问题描述】:

这条规则就是我对 Go 中 slice 的了解

  • 当元素的数量和容量的宽度相同时(len(fruits) == cap(fruits)),append() 产生的新元素就是新的引用。
  • 当元素个数小于容量(len(fruits)

我有这样的代码

package main

import (
    "fmt"
)

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

    //using two index technique to make slice
    var newFruits = fruits[1:2]

    //append element to fruits slice
    fruits = append(fruits, "papaya")
    
    //append element to newFruits slice
    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]
    
}

为什么水果的价值不是【香蕉芒果龙木瓜】?

【问题讨论】:

标签: go append slice


【解决方案1】:

代码的工作原理如下:

就在将papaya 附加到fruits 之前,

fruits = {"banana", "mango", "tomato"}

newFruits 指向与fruits 相同的数组,但从mango 开始。

当您将papaya 附加到fruits 时,将创建一个容量=6 的新数组,因为fruits 的容量为3。fruits 现在指向这个新数组,具有4 个值:

fruits = {"banana", "mango", "tomato", "papaya"}

newFruits 仍然指向旧的 fruits 数组,并包含 2 个元素。

【讨论】:

  • 我明白了……“创建了一个新数组”和“newFruits 仍然指向旧水果”让我明白了
猜你喜欢
  • 2022-11-21
  • 2014-07-06
  • 1970-01-01
  • 2021-03-13
  • 2012-09-23
  • 2012-10-17
  • 1970-01-01
  • 2015-02-04
  • 2014-04-17
相关资源
最近更新 更多