1. 程式人生 > >golang基礎學習----Go 語言陣列

golang基礎學習----Go 語言陣列

在這裡插入圖片描述

陣列定義
陣列是具有相同唯一型別的一組已編號且長度固定的資料項序列(這是一種同構的資料結構);這種型別可以是任意的原始型別例如整形、字串或者自定義型別。陣列長度必須是一個常量表達式,並且必須是一個非負整數。需要強調:陣列長度也是陣列型別的一部分。

Go語言陣列
陣列是Go語言程式設計中最常用的資料結構之一。顧名思義,陣列就是指一系列同一型別資料的集合。陣列中包含的每個資料被稱為陣列元素( element),一個數組包含的元素個數被稱為陣列的長度。需要強調的一點是Go語言中陣列的長度固定,無法擴容。

宣告定義
陣列在定義初始化的時候,長度可以指定,也可以不指定讓編譯器自動推斷。幾種常見的陣列定義初始化的方式如下:

var a [3] int   //3個int型的陣列,初始值是3個0,陣列“零值”狀態
arr:=[5]int{1,2,3,4,5}   //定義並初始化長度為5的陣列
var array2 = [...]int{6, 7, 8} //不宣告長度
q := [...] int {1,2,3} //不宣告長度
r := [...] int {99:-1}  //長度為100的陣列,只有最後一個是-1,其他都是0

在宣告var arr1 [5]int中每個元素是一個整形值,當宣告陣列時所有的元素都會被自動初始化為預設值 0。

陣列元素訪問
Go語言中,可以使用陣列下標來訪問陣列中的元素。陣列下標從0開始,len(arr)-1則表示最後一個元素的下標。

只有有效的索引可以被使用,當使用等於或者大於 len(arr)的索引時:如果編譯器可以檢測到,會給出索引超限的提示資訊;如果檢測不到的話編譯會通過而執行時會 panic。

比起C語言,Go語言可以直接呼叫列印函式打印出整個陣列。下面我們定義一個二維陣列,然後來打印出陣列長度和整個陣列:

package main

import "fmt"

func main() {
    myArray := [3][4]int{{1,2,3,4},{1,2,3,4},{1,2,3,4}}
    
    //列印一維陣列長度
    fmt.Println(len(myArray))
    //列印二維陣列長度
    fmt.Println(len(myArray[1]))
    //列印整個二維陣列
    fmt.Println(myArray)
}

以下演示了陣列完整操作(宣告、賦值、訪問)的例項:

package main

import "fmt"

func main() {
   var n [10]int /* n 是一個長度為 10 的陣列 */
   var i,j int

   /* 為陣列 n 初始化元素 */         
   for i = 0; i < 10; i++ {
      n[i] = i + 100 /* 設定元素為 i + 100 */
   }

   /* 輸出每個陣列元素的值 */
   for j = 0; j < 10; j++ {
      fmt.Printf("Element[%d] = %d\n", j, n[j] )
   }
}

執行結果如下

Element[0] = 100
Element[1] = 101
Element[2] = 102
Element[3] = 103
Element[4] = 104
Element[5] = 105
Element[6] = 106
Element[7] = 107
Element[8] = 108
Element[9] = 109

根據上一行的內容,來獲取下一行的內容並打印出來。

package main
import "fmt"
func GetYangHuiTriangleNextLine(inArr []int) []int {
    var out []int
    var i int
    arrLen := len(inArr)
    out = append(out, 1)
    if 0 == arrLen {
        return out
    }
    for i = 0; i < arrLen-1; i++ {
        out = append(out, inArr[i]+inArr[i+1])
    }
    out = append(out, 1)
    return out
}
func main() {
    nums := []int{}
    var i int
    for i = 0; i < 10; i++ {
        nums = GetYangHuiTriangleNextLine(nums)
        fmt.Println(nums)
    }
}

輸出

[1]
[1 1]
[1 2 1]
[1 3 3 1]
[1 4 6 4 1]
[1 5 10 10 5 1]
[1 6 15 20 15 6 1]
[1 7 21 35 35 21 7 1]
[1 8 28 56 70 56 28 8 1]
[1 9 36 84 126 126 84 36 9 1]