26_append 函數的使用


append 函數的使用
1.內置函數append用來將元素追加到slice的后面

2.如果使用append追加時,原底層數組容量夠時,還會使用原來的底層數組,並把新的元素復制到原數組的后面,如果slice的容量不夠時,就把原來的數組擴展一倍,並把原來的slice數組復制到
  新的擴充數組中,然后再將新元素追加到數組的后面.

3.每次數組容量擴展時,通過擴展一倍的容量來減少內存的分配的次數,這樣也保證了追加一個元素所消耗的是固定時間.

4.通常情況下,我們並不清楚一次append調用會不會導致一次新的內存分配,所以我們不能假設原來的slice和新用append后的結果slice指向同一個底層數組,也無法證明它們指的是不同數組
  所以我們通常將append的調用結果再次賦值傳入append函數的slice.

5.append函數可以同時給slice添加多個元素,甚至添加另一個slice里的所有元素. 例如:var x []int x=append(x,1) x=append(x,2) x=append(x,x...)//1,2
  其中(...)表示函數可以接受可變長度參數;列表

具體使用代碼:

package main
 
        
import "fmt"
 
         
         
        
func main() {
	//定義並創建一個切片
	s1 := []int{1, 2, 3}
	fmt.Println("原s1:", s1)
	//append(s1, 5) // append(s1, 5) evaluated but not used ,不能夠單獨使用,必須把它賦給一個切片變量
	s1 = append(s1, 5)
	fmt.Println("新s1:", s1)
 
        
	//通過make內置函數創建一個且切片,一般用for循環進行復制
	s2 := make([]int, 10)
	fmt.Println("原 s2:", s2) // s2: [0 0 0 0 0 0 0 0 0 0]
	s2 = append(s2, 1)
	fmt.Println("新 s2:", s2) // s2: [0 0 0 0 0 0 0 0 0 0 1]在后面加一個
	for i := 0; i < len(s2); i++ {
		s2[i] = i
	}
	fmt.Println("最新 s2:", s2) 
 
        
	//append 函數會智能的在底層數組容量上增長,一旦超越了原來的底層數組的容量,通常是以1倍容量重新分配底層數組
	s3 := make([]int, 2)
	fmt.Println("len(s3):", len(s3), "cap(s3):", cap(s3)) //len(s3): 2 cap(s3): 2
	s3 = append(s3, 1)
	fmt.Println(s3)                                       //[0 0 1]
	fmt.Println("len(s3):", len(s3), "cap(s3):", cap(s3)) //len(s3): 2 cap(s3): 4
	s3 = append(s3, 1)
	s3 = append(s3, 1)
	fmt.Println("len(s3):", len(s3), "cap(s3):", cap(s3)) //len(s3): 5 cap(s3): 8
 
        
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM