In der Go-Sprache wird die Funktion append() verwendet, um Elemente dynamisch zu einem Slice hinzuzufügen. Sie können Elemente am Ende des Slice hinzufügen und das Ergebnis zurückgeben. Beim Aufruf der Append-Funktion müssen Sie die ursprüngliche Slice-Variable verwenden Um den Rückgabewert zu erhalten, können Sie die Anweisung „slice = append(slice,elem2)“ verwenden.
Die Betriebsumgebung dieses Tutorials: Windows 7-System, GO Version 1.18, Dell G3-Computer.
Die integrierte Funktion append() der Go-Sprache kann dynamisch Elemente zu einem Slice hinzufügen.
slice = append(slice,elem1,elem2)
append Innerhalb der Klammern können nach dem ersten Parameter-Slice mehrere Parameter hinzugefügt werden.
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增加两倍 }
Ausgabeergebnis:
s1=[火鸡面 辛拉面 汤达人] len(s1)=3 cap(s1)=3 s1=[火鸡面 辛拉面 汤达人 小当家] len(s1)=4 cap(s1)=6
slice = append(slice,anotherSlice...)
append In den Klammern dürfen nur zwei Parameter stehen, ein Slice und das andere angehängte Slice.
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)) }
Ausgabeergebnis:
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)) } }
Ausgabeergebnis:
[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
Hinweis:
(1) make erstellt ein Slice mit Die Standardlänge hat einen Standardwert.
append() fügt Elemente nach dem Standardwert hinzu, anstatt den Standardwert zu überschreiben.
(2) Wenn das Element die beim Erstellen von Make festgelegte Kapazität von 10 überschreitet und die ursprüngliche untere Ebene nicht zusammengesetzt werden kann, wird eine neue fortlaufende Adresse zum Speichern des Elements verwendet.
Go bietet keine Funktion zum gezielten Löschen von Elementen. Stattdessen werden Elemente über die Eigenschaften des Slice selbst gelöscht.
Das heißt, Sie nehmen das gelöschte Element als Trennpunkt und verwenden dann „Anhängen“, um die Erinnerung an die beiden Teile davor und danach wieder zu verbinden.
Zum Beispiel:
Wenn Sie ein Element in Slice s löschen möchten, ist der Index des gelöschten Elements index
Dann ist der Löschvorgang
s = append ( s[ :index ], s[ index+1: ] )
Verbinden Sie die beiden Teile vorher und nachher wieder, was im Wesentlichen darauf hinausläuft Löschen Sie den Punkt. Elemente werden nach vorne verschoben, der Speicher wird wieder verbunden.
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) }
Das Prinzip der Verwendung von „append“ zum Löschen von Elementen in Go lautet:
(Die Zeichnung ist hässlich ...)
Ausgabeergebnis:
[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]
Nachdem Sie es verstanden haben, können Sie versuchen, die folgende Programmausgabe zu erraten lautet:
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) }
Richtiges Ergebnis:
[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]
[Verwandte Empfehlungen: Go-Video-Tutorial, Programmierunterricht]
Das obige ist der detaillierte Inhalt vonSo verwenden Sie append() in der Go-Sprache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!