數組 - Go 語言學習筆記

Go語言數組的定義

數組(Array)是具備相同類型的一組已編號且長度固定的數據項序列。數據存儲的類型能夠是任意的原始類型,例如整形、字符串或者自定義類型。數組

因爲內存連續分配存儲空間給數組,因此CPU能把正在使用的數據緩存更久的時間,而且由於內存連續因此索引很容易計算,能夠快速迭代數組中全部的元素。緩存

Go語言數組的聲明和初始化

聲明數組:bash

Go 語言數組聲明須要指定存儲元素的類型及元素個數,一旦聲明以後元素類型和數組長度不能更改。 語法格式以下:函數

var variable_name [SIZE] variable_type
複製代碼

例如:ui

var balance [10] float32    // 一維數組 balance 長度爲 10 類型爲 float32
複製代碼

初始化數組:spa

初始化數組中 {} 中的元素個數不能大於 [] 中的數字。指針

var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
複製代碼

若是忽略 [] 中的數字不設置數組大小,Go 語言會根據元素的個數來設置數組的大小:code

var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
複製代碼

Go語言數組的使用

數組元素能夠經過索引(位置)來讀取(或者修改),索引從0開始,第一個元素索引爲 0,第二個索引爲 1,以此類推。cdn

讀取或修改數組格式爲數組名後加中括號,中括號中爲索引的值。blog


讀取數組: > ``` > var salary float32 = balance[9] // 讀取數組balance第10個元素的值 > ```

修改數組:

balance[4] = 50.0
複製代碼


遍歷數組:
// range
for k, v := range balance {
    fmt.Println(k, v)
}

// for 循環
var i int
for i = 0; i < 10; i++ {
    fmt.Println(i, balance[i])
}
複製代碼

向函數傳遞數組:

要向函數傳遞數組參數,首先須要在函數定義時聲明形參爲數組,能夠經過如下兩種方式來聲明:

方式一

形參設定數組大小:

void myFunction(param [10]int)
{
  ...
}
複製代碼

方式二

形參未設定數組大小:

void myFunction(param []int)
{
  ...
}
複製代碼

實例:

package main

import "fmt"

func main() {
   /* 數組長度爲 5 */
   var  balance = []int {1000, 2, 3, 17, 50}
   var avg float32

   /* 數組做爲參數傳遞給函數 */
   avg = getAverage( balance, 5 ) ;

   /* 輸出返回的平均值 */
   fmt.Printf( "平均值爲: %f ", avg );  // 平均值爲: 214.399994
}
func getAverage(arr []int, size int) float32 {
   var i,sum int
   var avg float32  

   for i = 0; i < size;i++ {
      sum += arr[i]
   }

   avg = float32(sum) / float32(size)

   return avg;
}
複製代碼

注意:被函數引用的形參數組是函數的一個副本,在函數內部改變形參數組,不會影響原來的數組,若是要改變就用指針數組。

Go 語言多維數組

多維數組的聲明:

var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type
複製代碼

二維數組

二維數組是最簡單的多維數組,二維數組本質上是由一維數組組成的。二維數組定義方式以下:

var arrayName [ x ][ y ] variable_type      // variable_type是數據類型, arrayName是數組名
複製代碼

二維數組可認爲是一個表格,x 爲行,y 爲列,下圖演示了一個二維數組 a 爲三行四列:

初始化二維數組

多維數組可經過大括號來初始值。如下實例爲一個 3 行 4 列的二維數組:

a = [3][4]int{  
    {0, 1, 2, 3} ,      /* 第一行索引爲 0 */
    {4, 5, 6, 7} ,      /* 第二行索引爲 1 */
    {8, 9, 10, 11},     /* 第三行索引爲 2 */
}
// 注意:以上代碼中倒數第二行的 } 必需要有逗號,由於最後一行的 } 不能單獨一行,也能夠寫成這樣:\

a = [3][4]int{  
    {0, 1, 2, 3} ,      /* 第一行索引爲 0 */
    {4, 5, 6, 7} ,      /* 第二行索引爲 1 */
    {8, 9, 10, 11}}     /* 第三行索引爲 2 */

複製代碼

訪問二維數組 經過指定座標(行索引與列索引)來訪問二維數組,例如:

val := a[2][3]  // 二維數組 val 第三行的第四個元素
// 或
var value int = a[2][3]
複製代碼

能夠使用循環嵌套來輸出二維數組的元素:

package main

import "fmt"

func main() {
    // 數組 - 5 行 2 列
    var a = [5][2]int{ {0,0}, {1,2}, {2,4}, {3,6},{4,8}}
    var i ,j int

    // 輸出數組元素
    for  i = 0; i < 5; i++ {
        for j = 0; j < 2; j++ {
            fmt.Printf("a[%d][%d] = %d\n", i,j, a[i][j] )
        }
    }
}

// 以上實例運行輸出結果爲:
a[0][0] = 0
a[0][1] = 0
a[1][0] = 1
a[1][1] = 2
a[2][0] = 2
a[2][1] = 4
a[3][0] = 3
a[3][1] = 6
a[4][0] = 4
a[4][1] = 8
複製代碼
相關文章
相關標籤/搜索