1. <dd id="erndk"></dd>
                1. GO語言學習——切片三 append()方法為切片添加元素、切片的擴容策略、使用copy()函數復制切片、從切片中刪除元素

                  互聯網 2022/4/30 23:23:32

                  append()方法為切片添加元素 注意:通過var聲明的零值切片可以在append()函數直接使用,無需初始化。 var s []int s = append(s, 1, 2, 3)append()函數將元素追加到切片的最后并返回該切片。 切片numSlice的容量按照1,2,4,8,16這樣的規則自動進行擴容,每次擴容后都是…

                  append()方法為切片添加元素

                  注意:通過var聲明的零值切片可以在append()函數直接使用,無需初始化。

                  var s []int
                  s = append(s, 1, 2, 3)
                  
                  1. append()函數將元素追加到切片的最后并返回該切片。
                  2. 切片numSlice的容量按照1,2,4,8,16這樣的規則自動進行擴容,每次擴容后都是擴容前的2倍。

                  切片的擴容策略

                  查看$GOROOT/src/runtime/slice.go源碼

                  package main
                  
                  import "fmt"
                  
                  // append() 為切片追加元素
                  
                  func main(){
                  	s1 := []string{"北京", "上海", "深圳"}
                  	fmt.Printf("s1=%v len(s1)=%d cap(s1)=%d\n", s1, len(s1), cap(s1))
                  	// s1[3] = "廣州" // 錯誤的寫法 會導致編譯錯誤:索引越界
                  	// fmt.Println(s1)  // index out of range [3] with length 3
                  
                  	// 調用append函數必須用原來的切片變量接收返回值
                  	// append追加元素 原來的底層數組放不下的時候 Go語言就會把底層數組換一個
                  	// 必須用變量接收append的返回值
                  	fmt.Println(s1)
                  	s1 = append(s1, "廣州") 
                  	fmt.Printf("s1=%v len(s1)=%d cap(s1)=%d\n", s1, len(s1), cap(s1))
                  	s1 = append(s1, "杭州", "成都")
                  	fmt.Printf("s1=%v len(s1)=%d cap(s1)=%d\n", s1, len(s1), cap(s1))
                  	ss := []string{"武漢", "西安", "蘇州"}
                  	s1 = append(s1, ss...) // ...表示拆開
                  	fmt.Printf("s1=%v len(s1)=%d cap(s1)=%d\n", s1, len(s1), cap(s1))
                  }
                  

                  使用copy()函數復制切片

                  copy()函數的格式:

                  copy(destSlice, srcSlice []T)
                  

                  其中:

                  • srcSlice: 數據來源切片
                  • destSlice: 目標切片

                  從切片中刪除元素

                  package main
                  
                  import "fmt"
                  
                  // 關于append刪除切片中的某個元素
                  
                  func main(){
                  	a1 := [...]int{1,3,5,7,9,11,13,15,17}
                  	s1 := a1[:]
                  	
                  	// 刪除索引為1的那個3
                  	s1 = append(s1[0:1], s1[2:]...)
                  	fmt.Println(s1) // [1 5 7 9 11 13 15 17]
                  	fmt.Println(a1) // [1 5 7 9 11 13 15 17 17]
                  }
                  

                  切片不存值 底層數組存值

                  package main
                  
                  import "fmt"
                  
                  // copy
                  
                  func main() {
                  	a1 := []int{1,3,5}
                  	a2 := a1  // 賦值
                  	// var a3 []int // nil
                  	var a3 = make([]int, 3, 3)
                  	copy(a3, a1) // copy
                  	fmt.Println(a1, a2, a3)
                  	a1[0] = 100
                  	fmt.Println(a1, a2, a3)
                  
                  	// 將a1中的索引為1的3這個元素刪除
                  	a1 = append(a1[:1], a1[2:]...)
                  	fmt.Println(a1)
                  	fmt.Println(cap(a1))
                  
                  	x1 := [...]int{1, 3, 5} // 數組
                  	s1 := x1[:]
                  	fmt.Println(s1, len(s1), cap(s1))
                  	// 1. 切片不保存具體的值
                  	// 2. 切片對應一個底層數組
                  	// 3. 底層數組都是占用一塊連續的內存
                  	fmt.Printf("%p\n", &s1[0])
                  	s1 = append(s1[:1], s1[2:]...) // 修改了底層數組!
                  	fmt.Printf("%p\n", &s1[0])
                  	fmt.Println(s1, len(s1), cap(s1))
                  	// ?
                  	// s1[0] = 100 // 修改底層數組
                  	fmt.Println(x1) // [1 5 5]
                  }
                  

                  練習題

                  package main
                  
                  import (
                  	"fmt"
                  	"sort"
                  )
                  
                  // 切片的練習題
                  
                  func main() {
                  	var a = make([]int, 5, 10) // 創建切片 長度為5 容量為10
                  	fmt.Println(a) // [0 0 0 0 0]
                  	for i := 0; i < 10; i++ {
                  		a = append(a, i)
                  	}
                  	fmt.Println(a) // [0 0 0 0 0 0 1 2 3 4 5 6 7 8 9]
                  	fmt.Println(cap(a))
                  
                  	// sort排序
                  	var a1 = [...]int{3, 7, 8, 9, 1}
                  	sort.Ints(a1[:]) // 對切片進行排序
                  	fmt.Println(a1)
                  }
                  隨時隨地學軟件編程-關注百度小程序和微信小程序
                  關于找一找教程網

                  本站文章僅代表作者觀點,不代表本站立場,所有文章非營利性免費分享。
                  本站提供了軟件編程、網站開發技術、服務器運維、人工智能等等IT技術文章,希望廣大程序員努力學習,讓我們用科技改變世界。
                  [GO語言學習——切片三 append()方法為切片添加元素、切片的擴容策略、使用copy()函數復制切片、從切片中刪除元素]http://www.yachtsalesaustralia.com/tech/detail-318335.html

                  贊(0)
                  關注微信小程序
                  程序員編程王-隨時隨地學編程

                  掃描二維碼或查找【程序員編程王】

                  可以隨時隨地學編程啦!

                  技術文章導航 更多>
                  掃一掃關注最新編程教程
                  国产在线拍揄自揄视频菠萝

                        1. <dd id="erndk"></dd>