Goの中でArrayは、型と長さ合わせてArray型になります。
違う長さの場合は == または != で比較するとエラーになります。
GoのArray型の書き方
基本書き方
var 変数名 = [n]型 {値1,...,値n}
例:
var months = [12]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
出力:
[1 2 3 4 5 6 7 8 9 10 11 12]
長さ省略
「...」を利用して長さは省略可能です。
例:
var months = [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
出力:
[1 2 3 4 5 6 7 8 9 10 11 12]
値指定なし
例:
var arr = [12]int{}
出力:
[0 0 0 0 0 0 0 0 0 0 0 0]
ちなみに、省略すると、長さは0のArrayになります。
例:
var arr = [...]int{}
出力:
[]
一部のみ値指定
例:
var arr = [12]int{8: 9, 11: 12}
出力:
[0 0 0 0 0 0 0 0 9 0 0 12]
indexは0からです。8:9の場合は、9個目の値は9で設定されます。
要素値のアクセス
変数[index]
例:
var arr = [12]int{8: 9, 11: 12}
fmt.Println(arr[8])
出力:
9
要素値の変更
変数[index] = 新しい値
例:
var arr = [12]int{8: 9, 11: 12}
arr[8] = 999
fmt.Println(arr[8])
出力:
999
Arrayのメソッド
長さ:len(変数名)
例:
var array = [12]int{8: 9, 11: 12}
fmt.Println(len(array))
出力:
12
容量:cap(変数名)
var array = [12]int{8: 9, 11: 12}
fmt.Println(cap(array))
出力:
12
Array比較
Arrayは同じ型、同じ長さの場合だけ比較できます。
「==」で等しい判断
例:
var arr1 = [12]int{8: 9, 11: 12}
var arr2 = [12]int{8: 9, 11: 12}
fmt.Println(arr1 == arr2)
出力:
true
「!=」で等しくない判断
例:
var arr1 = [12]int{8: 9, 11: 12}
var arr2 = [12]int{8: 90, 11: 120}
fmt.Println(arr1 != arr2)
出力:
true
長さが違う場合は比較できない
例:
var arr1 = [12]int{8: 9, 11: 12}
var arr2 = [24]int{8: 90, 11: 120}
fmt.Println(arr1 == arr2)
出力:
invalid operation: arr1 == arr2 (mismatched types [12]int and [24]int)
二次元Array
例:
var data = [3][2]int{{1, 2}, {11, 22}, {111, 222}}
出力:
[[1 2] [11 22] [111 222]]
ちなみに、一つ目の長さは省略可能です。
例:
var data = [...][2]int{{1, 2}, {11, 22}, {111, 222}}
出力:
[[1 2] [11 22] [111 222]]
操作は一元Arrayと同じ
例:データアクセス
var data = [...][2]int{{1, 2}, {11, 22}, {111, 222}}
fmt.Println(data[1][1])
出力:
22
ポインター定義
Arrayが値引用のため、関数の中で加工したい場合は、ポインターで定義
例1:
arr := [12]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
var p *[12]int = &arr
fmt.Println(p)
出力:
&[1 2 3 4 5 6 7 8 9 10 11 12]
例2:newで定義
p := new([10]int)
p[9] = 10
fmt.Println(p)
出力:
&[0 0 0 0 0 0 0 0 0 10]
以上