配列
Go言語にはarrayとsliceがある。
array:Javaの配列と似ている。定義するときに長さを設定する。
slice:JavaのListと似ている。動的に長さが変わる。
slice作成
Sliceを作成する方法としてGoの内部関数のmake()を利用できる。
make()でsliceを作成すると開発者がsliceの長さと容量を任意的に指定できるメリットがある。
make() の引数
- Type([]int ….)
- Length(10…)
- 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の内構造
- 配列に対してのポインター
- セグメントの長さ
- セグメントの容量
