Rumah > Artikel > pembangunan bahagian belakang > Ubah suai nilai dalam salinan kepingan dan tambahkan pada kepingan asal
Dalam PHP, Slice ialah struktur data yang biasa digunakan yang membolehkan kami memilih sebahagian daripada elemen daripada tatasusunan atau kepingan. Walau bagaimanapun, kadangkala kita perlu mengubah suai kepingan dan menambah nilai yang diubah suai pada kepingan asal. Operasi ini boleh dilakukan dalam PHP dengan mengubah suai nilai dalam salinan kepingan dan kemudian menambahkan salinan yang diubah suai pada kepingan asal menggunakan fungsi array_splice. Dalam artikel ini, kami akan memperincikan cara menggunakan kaedah ini untuk melaksanakan pengubahsuaian kepingan dan operasi tambah.
Tulis fungsi yang menyalin kepingan dan mengubah suai nilai item dalam salinan kepingan, kemudian tambahkan salinan itu pada salinan asal. Nampaknya kod itu bukan sahaja mengubah suai salinan kepingan, tetapi juga kepingan asal.
Pergi ke taman permainan
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", n, *i) } }
Apa yang saya nampak sebenarnya
0 {name:a number:2} 1 {name:b number:2} 2 {name:a number:2} 3 {name:b number:2}
Apa yang saya harapkan dapat dilihat
0 {name:a number:1} 1 {name:b number:1} 2 {name:a number:2} 3 {name:b number:2}
@jimb betul, awak salin penunjuk,
Saya cadangkan mentakrifkan fungsi salin kepunyaan item struct untuk mencipta salinan baharu
package main import "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 < len(items); j++ { itemCopies[j] = items[j].copy() } 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", n, *i) } }
Atas ialah kandungan terperinci Ubah suai nilai dalam salinan kepingan dan tambahkan pada kepingan asal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!