Go中的陣列

她們都叫我劍俠發表於2018-08-07

Go中的陣列

概念

陣列是用來儲存集合的資料。除了陣列還有切片, map對映等, 但陣列是他們的基礎。

內部實現

  1. 陣列是長度固定的資料型別
  2. 陣列必須儲存型別相同並且連續的元素
  3. 可以通過索引獲得陣列中的任意資料
  4. 因為資料元素型別相同, 也可以通過反射, 獲取型別佔用大小, 進行移位, 獲取相應元素

宣告和初始化

宣告特點

  1. 指定儲存資料的型別
  2. 指定儲存資料的數量
  3. 陣列一旦宣告之後, 元素型別和大小都不能發生改變; 如果要改變陣列結構只能建立新陣列, 將原陣列複製進去

初始化

  • 用零值初始化陣列, 用值再次初始化

    var array [5]int
    array = [5]int{1, 2, 3, 4, 5}
    複製程式碼
  • 使用:=符號進行初始化

    array := [5]int{1, 2, 3, 4, 5}
    複製程式碼
  • 使用...符號初始化陣列

    array := [...]int{1, 2, 3, 4, 5}
    複製程式碼
  • 陣列部分初始化

    array := [...]int{0 ,1, 0, 4, 0}
    array := [...]int{1: 1, 3: 4}
    複製程式碼

使用陣列

訪問陣列

使用索引進行陣列資料訪問

array:=[5]int{1:1,3:4}
fmt.Printf("%d",array[1])
複製程式碼

修改陣列

使用索引修改陣列

array:=[5]int{1:1,3:4}
fmt.Printf("%d\n",array[1])
array[1] = 3
fmt.Printf("%d\n",array[1])
複製程式碼

獲得陣列中的所有值

  • for迴圈

    
    array := [5]int{1: 1, 3: 4}
    for i := 0; i < 5; i++ {
    	fmt.Printf("索引:%d,值:%d\n", i, array[i])
    }
    複製程式碼
  • for range 迴圈

    func main() {
    array := [5]int{1: 1, 3: 4}
    for i, v := range array {
    	fmt.Printf("索引:%d,值:%d\n", i, v)
    }
    
    複製程式碼

相同型別陣列賦值

  • 相同陣列

    1. 陣列長度一致
    2. 陣列中每個元素型別必須一致
  • 賦值過程

    array := [5]int{1, 2, 3, 4, 5}
    var array1 [5]int = array // success
    var array2 [4]int = array // error
    複製程式碼

指標陣列

  • 元素型別為指標的陣列
  • 只能給分配記憶體的索引賦值, 未分配的索引是無效的
  • 建立過程
    array := [5]*int{1: new(int), 3:new(int)}
    *array[1] = 1
    複製程式碼

注意點

  1. 陣列指標和指標陣列是兩個概念
  2. 陣列指標 *[5]int
  3. 指標陣列 [5]*int

相關文章