修改切片副本中的值然后附加到原始切片

修改切片副本中的值然后附加到原始切片

在PHP中,切片(Slice)是一种常用的数据结构,它允许我们从一个数组或切片中选取一部分元素。然而,有时候我们需要对切片进行修改,并将修改后的值附加到原始切片中。这种操作在PHP中是可以实现的,通过修改切片副本中的值,然后使用array_splice函数将修改后的副本附加到原始切片中即可。在本文中,我们将详细介绍如何使用这种方法实现切片的修改和附加操作。

问题内容

编写一个函数来复制切片并修改切片副本中项目的值,然后将副本附加到原始副本。看起来代码不仅修改了切片的副本,还修改了原始切片。

去游乐场

import "fmt"type item struct {    name   string    number int}func main() {    names := []string{"a", "b"}    numbers := []int{1, 2}    items := []*item{}    for _, name := range names {        item := &item{name: name}        items = append(items, item)    }    for n, i := range numbers {        if n > 0 {            fmt.println(n, "make a copy of the items")            itemcopies := make([]*item, len(items))            copy(itemcopies, items)            fmt.println(n, "set the numbers on the copies")            for _, item := range itemcopies {                item.number = i            }            fmt.println(n, "append the copies to the original")            items = append(items, itemcopies...)        } else {            fmt.println(n, "first pass set all the items to the first number")            for _, item := range items {                item.number = i            }        }    }    for n, i := range items {        fmt.printf("%d %+v", n, *i)    }}

登录后复制

我实际看到的

0 {name:a number:2}1 {name:b number:2}2 {name:a number:2}3 {name:b number:2}

登录后复制

我期望看到什么

0 {name:a number:1}1 {name:b number:1}2 {name:a number:2}3 {name:b number:2}

登录后复制

解决方法

@jimb 是对的,你复制指针,

我建议定义一个属于struct item的copy函数来新建一个副本

package mainimport "fmt"type Item struct {    name   string    number int}func (it *Item) copy() *Item {    return &Item{        name:   it.name,        number: it.number,    }}func main() {    names := []string{"a", "b"}    numbers := []int{1, 2}    items := []*Item{}    for _, name := range names {        item := &Item{name: name}        items = append(items, item)    }    for n, i := range numbers {        if n > 0 {            fmt.Println(n, "make a copy of the items")            itemCopies := make([]*Item, len(items))            for j := 0; j 

登录后复制

以上就是修改切片副本中的值然后附加到原始切片的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2356891.html

(0)
上一篇 2025年3月1日 16:05:07
下一篇 2025年3月1日 16:05:24

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论