1. 程式人生 > >Go程式設計基礎——陣列array

Go程式設計基礎——陣列array

陣列Array
1、定 義 數 組 的 格 式 : var<varName> [n]<<type> ,n>=0
2、數 組 長 度 也 是 類 型 的一部分, 因此 具 有 不 同 長 度 的陣列為 為 不 同 類 型
3、注 意 區 分 指 向 數 組 的 指標和 指 針 數 組
4、數 組 在Go 中 為 值 類 型
5、數 組 之 間 可 以 使 用 = = 或 ! = 進 行 比 較 , 但 不 可 以 使 用 < 或 >
6、可 以 使 用 new 來 創 建陣列 , 此 方 法 返 回 一 個 指 向 數 組 的 指 針
7、Go支 持 多 維 數 組

var a [1]int
var b [10]int

以上a,b陣列為不同的陣列型別,因為它們的長度不一樣。同類型的陣列才可以使用= = 或 ! = 進 行 比 較。
Go語言中陣列比較便捷的地方,可以快速的給某一個位置的賦值如下

x:=[20]int{19:1}
fmt.Println(x)

結果如下

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1]

這就快速把第二十個值賦值,陣列的起始下標是0.
Go語言的陣列可以自動計算陣列的個數,如下

x:=[...]int{1,2,3,4,5,6,7}

也可以結合上兩種方式賦值,舉例如下:

y:=[...]int{0:1,1
:2,2:3}

下邊分析一下指向陣列的指標和指標陣列

z:=[...]int{9:1}
var p *[10]int=&z
fmt.Println(z)
fmt.Println(p)

執行結果

[0 0 0 0 0 0 0 0 0 1]
&[0 0 0 0 0 0 0 0 0 1]

其中p就是指向陣列的指標

x,y:=1,2
a:=[...]*int{&x,&y}
fmt.Println(a)

這裡實際上儲存的地址,執行結果如下

[0xc0420080a8 0xc0420080c0]

這裡的a就是指標陣列
還有一個是Go語言中的特殊地方,其他語言中為了節省記憶體,陣列是引用型別,而在Go語言中陣列是值型別,Go語言中引用型別的陣列用切片(slice)來表示。

p:=new([10]int)
fmt.Println(p)

執行結果如下

&[0 0 0 0 0 0 0 0 0 0]

這就是使用new關鍵字建立一個數組返回的是一個指向陣列的指標。

還有一點就是不管指向陣列的指標還是陣列本身都可以使用下標來操作某一個具體的元素如下;

b:=[10]int{}
b[2]=2
p:=new([10]int)
p[2]=2
fmt.Println(b)
fmt.Println(p)

執行結果

[0 0 2 0 0 0 0 0 0 0]
&[0 0 2 0 0 0 0 0 0 0]

多維陣列

a:=[2][3]int{
   {1,2,3},
   {4,5,6},
}
fmt.Println(a)

//或

a:=[2][3]int{
{1,2,3},
{4,5,6}}
fmt.Println(a)

對前邊中括號中的2和3的解釋就是陣列中有2個元素,每個元素就是長度為3的int陣列。

以下:Go 語 言 版 冒 泡 排 序–從大到小排序

b:=[...]int{3,1,6,99,9}
fmt.Println(b)
num:=len(b)
for i:=0;i<num ;i++  {
   for j:=i+1;j<num ;j++  {
      if b[i]<b[j]{
         temp:=b[i]
         b[i]=b[j]
         b[j]=temp
      }

   }
}
fmt.Println(b)

執行結果

[3 1 6 99 9]
[99 9 6 3 1]