0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Goにおける配列とスライスの特徴&その他まとめ

Last updated at Posted at 2019-08-12

配列の特徴

  • 定義の書き方
    1次元配列:var a [5]int{0, 1, 2, 3, 4}
    2次元配列:var a [2][2]int{ []int{0, 1}, []int{2, 3} }

  • 定義した時点で、中身は自動的に0で初期化されている

  • 配列変数は配列全体を示す(×先頭の配列要素)

スライスの特徴

  • 定義の書き方: var a []int{0, 1, 2, 3, 4}  ←長さなし

  • b := a[1:4]のように再スライスできる(aが配列でも同様にスライス可能)

  • 再スライスされた要素を変更するとb[1] = 50、元のスライス(配列)の要素もa = [0 1 **50** 3 4]のように変更される

スライスの長さ(length)と容量(capacity)

  • 長さ:含まれる要素数

    • スライスaの長さを求める ⇒ len(a) = 5
    • ex ) len(a[:3]) = 3, len(a[2:]) = 3
  • 容量:スライスの先頭から元の配列(スライス)の末尾までの要素数

    • スライスxの容量を求める ⇒ cap(x) = 5

    • ex1 ) cap(a[:3]) = 5 "スライスの先頭=元々の先頭" なら容量は元の配列と同じ

    • ex2 ) cap(a[2:]) = 3 "スライスの先頭≠元々の先頭"

  • 必ず(長さ) ≦ (容量) ⇒ スライスを拡張したいときは容量を大きくする

make関数でスライスをつくる

  • a := make([]int, 5)   :長さ5のスライス
    b := make([]int, 2, 5)  :長さ2、容量5のスライス(長さは0にしてもOK)

  • スライス元の配列要素はすべて0 ⇒ スライスの要素もすべて0
    a = [0 0 0 0 0]
    b = [0 0]

append関数でスライスに要素を追加する

  • 長さ0、容量0のスライスaに要素を追加
    a = append(a, 0, 1, 2) :長さ3、容量4のスライス

  • 要素を追加するとき元の配列の容量が小さい場合は、より大きいサイズの配列を割り当て直す

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?