Golang – slice

配列

Go言語にはarrayとsliceがある。

array:Javaの配列と似ている。定義するときに長さを設定する。
slice:JavaのListと似ている。動的に長さが変わる。

slice作成

Sliceを作成する方法としてGoの内部関数のmake()を利用できる。
make()でsliceを作成すると開発者がsliceの長さと容量を任意的に指定できるメリットがある。

make() の引数

  1. Type([]int ….)
  2. Length(10…)
  3. Capacity(10…)
func main() {
    s := make([]int, 5, 10)
    println(len(s), cap(s)) // len 5, cap 10
}

Sliceの長さと容量確認

  • len():Length
  • cap():Capacity

Sub-slice

Sub-Sliceを利用すると新しいSliceを作ることができる。
元のsliceの変更はない。

package main

import "fmt"

func main() {
	s := []int{0, 1, 2, 3, 4, 5}
	b := s[2:5]
	fmt.Println(s)
	fmt.Println(b)
}

append

①JavaのList.add()と同じメソッド
②appendを使い、指定した容量を超えたとしたら容量は2倍ずつ増加する。

①
func main() {
    s := []int{0, 1}
 
    // 1つの要素を追加
    s = append(s, 2)       // 0, 1, 2
    // 複数の要素を追加
    s = append(s, 3, 4, 5) // 0,1,2,3,4,5
 
    fmt.Println(s)
}

②
func main() {
	// len=0, cap=3 slice
	sliceA := make([]int, 0, 3)

	for i := 1; i <= 15; i++ {
		sliceA = append(sliceA, i)
		fmt.Println(len(sliceA), cap(sliceA))
	}

	fmt.Println(sliceA)
}

結果

1 3
2 3
3 3
4 6
5 6
6 6
7 12
8 12
9 12
10 12
11 12
12 12
13 24
14 24
15 24

Sliceの内構造

  • 配列に対してのポインター
  • セグメントの長さ
  • セグメントの容量

コメントを残す