GO語言--動態數據

什麼是動態數組

 動態數組就是不指定長度,使其長度自動變化。

動態數組參數

  • 動態數組幾個很重要的參數
    數組指針、長度、容量
    數組指針: 指向數組–>> 數組
// runtime
type slice struct {
	array unsafe.Pointer  // 指針
	len   int // 長度
	cap   int // 容量
}

動態數組的使用

  • 第一種:
// 定義數組  
	arr := []int{1,2,3}
	fmt.Println(arr, len(arr), cap(arr))

打印: [1 2 3] 3 3

  • 第二種
func  main()  {
	s1 := make([]int, 3)  // 創建數組
	fmt.Println(s1, len(s1), cap(s1)) // 創建容量
	s2 := make([]int, 3, 6)
	fmt.Println(s2, len(s2), cap(s2))
}
result: 
[0 0 0] 3 3
[0 0 0] 3 6

  • 第三種
func  main()  {
	var s1 []int
	emptySlice := []int{}
	fmt.Printf("len = %d, cap = %d, %#v\n", len(s1), cap(s1), s1)
	fmt.Printf("len = %d, cap = %d, %#v\n", len(emptySlice), cap(emptySlice), emptySlice)
}

result:
len = 0, cap = 0, []int(nil)
len = 0, cap = 0, []int{}

// 觀察得到: 沒有定義初始化空間,地址指向nil

談談關於Cap、length的理解

  • 第一種
    定義一個數組、基於數組做切片
func  main()  {
	data :=[...]int{0,1,2,3,4,5}
	slice :=data[1:4:5]
	// length = length -start = 4 -1 = 3
	// cap = max - start = 5 -1 = 4
	fmt.Printf("len = %d, cap = %d, %#v\n", len(slice), cap(slice), slice)
 
   // length = length -start = 1 - 0 =1
	// cap = max - start = max(6)- 0 = 6
	slice1 :=data[:1]
	fmt.Printf("len = %d, cap = %d, %#v\n", len(slice1), cap(slice1), slice1)

  // length = length -start = 1- 0 =1
	// cap = max - start = max(3)- 0 =3
	slice2 :=data[:1:3]
	fmt.Printf("len = %d, cap = %d, %#v\n", len(slice2), cap(slice2), slice2)

 // length = length -start =  6 -0 =6
	// cap = max - start =  6 -0 =6
	slice3 :=data[:]
	fmt.Printf("len = %d, cap = %d, %#v\n", len(slice3), cap(slice3), slice3)
}

result:
len = 3, cap = 4, []int{1, 2, 3}
len = 1, cap = 6, []int{0}
len = 1, cap = 3, []int{0}
len = 6, cap = 6, []int{0, 1, 2, 3, 4, 5}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章