Rumah > Artikel > pembangunan bahagian belakang > Cara menggunakan append() dalam bahasa go
Dalam bahasa Go, fungsi append() digunakan untuk menambahkan elemen secara dinamik pada hirisan Anda boleh menambah elemen pada penghujung kepingan dan mengembalikan hasilnya apabila memanggil fungsi tambah, anda mesti gunakan pembolehubah hirisan asal untuk menerima nilai pulangan dan menambah elemen Anda boleh menggunakan pernyataan "slice = append(slice,elem1,elem2)" Untuk menambahkan slice, anda boleh menggunakan "slice = append(slice,anotherSlice. ..)" kenyataan.
Persekitaran pengendalian tutorial ini: sistem Windows 7, GO versi 1.18, komputer Dell G3.
Fungsi terbina dalam bahasa Go append() boleh menambah elemen pada kepingan secara dinamik.
slice = append(slice,elem1,elem2)
Dalam kurungan tambahan, berbilang parameter boleh ditambah selepas kepingan parameter pertama.
package main import "fmt" //切片进阶操作 func main(){ //append()为切片追加元素 s1 := []string {"火鸡面","辛拉面","汤达人"} fmt.Printf("s1=%v len(s1)=%d cap(s1)=%d\n",s1,len(s1),cap(s1)) //调用append函数必须用原来的切片变量接收返回值 s1 = append(s1,"小当家") //append追加元素,原来的底层数组装不下的时候,Go就会创建新的底层数组来保存这个切片 fmt.Printf("s1=%v len(s1)=%d cap(s1)=%d\n",s1,len(s1),cap(s1))//cap增加两倍 }
Hasil keluaran:
s1=[火鸡面 辛拉面 汤达人] len(s1)=3 cap(s1)=3 s1=[火鸡面 辛拉面 汤达人 小当家] len(s1)=4 cap(s1)=6
slice = append(slice,anotherSlice...)
Tambah kurungan hanya boleh Terdapat dua parameter, satu untuk kepingan dan satu lagi untuk kepingan yang dilampirkan.
package main import "fmt" //切片进阶操作 func main(){ //append()为切片追加元素 s1 := []string {"火鸡面","辛拉面","汤达人"} fmt.Printf("s1=%v len(s1)=%d cap(s1)=%d\n",s1,len(s1),cap(s1)) //调用append函数必须用原来的切片变量接收返回值 s1 = append(s1,"小当家") //append动态追加元素,原来的底层数组容纳不下足够多的元素时,切片就会开始扩容,Go底层数组就会把底层数组换一个 fmt.Printf("s1=%v len(s1)=%d cap(s1)=%d\n",s1,len(s1),cap(s1)) //调用append添加一个切片 s2 := []string{"脆司令","圣斗士"} s1 = append(s1,s2...)//...表示拆开切片,再添加 fmt.Printf("s1=%v len(s1)=%d cap(s1)=%d",s1,len(s1),cap(s1)) }
Hasil keluaran:
s1=[火鸡面 辛拉面 汤达人] len(s1)=3 cap(s1)=3 s1=[火鸡面 辛拉面 汤达人 小当家] len(s1)=4 cap(s1)=6 s1=[火鸡面 辛拉面 汤达人 小当家 脆司令 圣斗士] len(s1)=6 cap(s1)=6
package main import "fmt" func main(){ var a = make([]int, 5, 10) fmt.Println(a) fmt.Printf("%p\n",a) for i := 0; i <10; i++ { a = append(a,i) //%p 打印切片地址 fmt.Printf("%v,%p,cap(a):%d\n",a,a,cap(a)) } }
Hasil keluaran:
[0 0 0 0 0] 0xc0000180a0 [0 0 0 0 0 0],0xc0000180a0,cap(a):10 [0 0 0 0 0 0 1],0xc0000180a0,cap(a):10 [0 0 0 0 0 0 1 2],0xc0000180a0,cap(a):10 [0 0 0 0 0 0 1 2 3],0xc0000180a0,cap(a):10 [0 0 0 0 0 0 1 2 3 4],0xc0000180a0,cap(a):10 [0 0 0 0 0 0 1 2 3 4 5],0xc00007c000,cap(a):20 [0 0 0 0 0 0 1 2 3 4 5 6],0xc00007c000,cap(a):20 [0 0 0 0 0 0 1 2 3 4 5 6 7],0xc00007c000,cap(a):20 [0 0 0 0 0 0 1 2 3 4 5 6 7 8],0xc00007c000,cap(a):20 [0 0 0 0 0 0 1 2 3 4 5 6 7 8 9],0xc00007c000,cap(a):20
Nota:
(1) membuat hirisan Jika terdapat panjang lalai, akan ada nilai lalai .
append() menambah elemen selepas nilai lalai, dan bukannya menimpa nilai lalai.
(2) Apabila elemen melebihi kapasiti 10 set apabila dicipta, dan nombor bawah asal tidak boleh dipasang, alamat berterusan baharu akan diganti untuk menyimpan elemen.
Go tidak menyediakan fungsi untuk memadamkan elemen secara khusus, tetapi memadamkan elemen melalui ciri-ciri kepingan itu sendiri.
Iaitu, elemen yang dipadam digunakan sebagai titik pembahagi, dan tambah digunakan untuk menyambung semula memori dua bahagian sebelum dan selepas.
Contohnya :
Jika anda ingin memadamkan elemen dalam slice s, indeks elemen yang dipadam ialah indeks
, maka proses pemadaman ialah
s = append ( s[ :index ], s[ index+1: ] )
Menyambung semula dua bahagian sebelum dan selepas pada asasnya menggerakkan elemen pada titik yang dipadamkan ke hadapan dan menyambung semula memori.
package main import "fmt" func main(){ a1 := [...]int{1,2,5,3,78,9,4,9,23,32} s1 := a1[:] //得到切片 fmt.Println(s1) //删除索引为4的78 s1 = append(s1[:4],s1[5:]...) fmt.Println(s1) fmt.Println(a1) }
Prinsip penggunaan append untuk memadam elemen dalam Go ialah:
(Lukisan itu hodoh...)
Hasil output:
[1 2 5 3 78 9 4 9 23 32] [1 2 5 3 9 4 9 23 32] [1 2 5 3 9 4 9 23 32 32]
Setelah memahami, anda boleh cuba meneka apakah output program berikut:
package main import "fmt" func main(){ a1 := [...]int{1,2,5,3,78,9,4,9,23,32} s1 := a1[:] //得到切片 fmt.Println(s1) //删掉索引为2和3的5,3 s1 = append(s1[:2],s1[4:]...) fmt.Println(s1) fmt.Println(a1) }
Hasil yang betul :
[1 2 5 3 78 9 4 9 23 32] [1 2 78 9 4 9 23 32] [1 2 78 9 4 9 23 32 23 32]
[Cadangan berkaitan: Pergi tutorial video, Pengajaran pengaturcaraan]
Atas ialah kandungan terperinci Cara menggunakan append() dalam bahasa go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!