2
0

More than 3 years have passed since last update.

Goの配列とスライスについて

Last updated at Posted at 2020-06-03

書き方

 配列

  • list := [3]string{"a","b","c"}
     配列 := [長さの数字]型{要素}

  • list := […]string{"a","b","c"} 要素の数を自動カウント

    スライス

  • slice := []string{"a","b","c"}
    スライス := [長さは指定しないので何も書かない]型{要素}

  • slice := list[0:5]
    スライス := 配列[n番目:m-1番目]
    ※部分列の取り方→配列[start:end]or[start:]or[:end]or[:]

  • slice := make([]int,5,5)
         make([ ]型,長さ,容量)

性質

スライスの長さlen(slice)と容量cap(slice)

  • 長さ=要素の数
  • 容量=スライスの最初の要素から数えて、元となる配列の要素
    ※配列をスライスしても元の要素の情報を参照型で保っている

インデックス(順番)

  • 配列もスライスもインデックスは0から数える
    例) list := [3]string{"0番目","1番目","2番目"}

要素の追加

  • 配列は宣言時に要素の数が固定
  • スライスは組み込み関数append()を使う
    例) newSlice = append(slice, 追加要素) →新しいスライスに元のスライス+最後に要素が追加される
  • appendが容量を超える場合、別途、容量を2倍した新しい配列をコピーします。コピーは処理コストが大きいのでmakeを使うのがおすすめ

要素の変更、代入

  • スライスの要素を指定することでそこだけを変更できる
package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "flag"
)

func main() {
    slice := [] int{1,2,3,4}
    slice[0] = 9
    fmt.Println(slice)[9,2,3,4]
  • スライスの型が一致している場合、スライスを代入することができる (元の配列の情報も引き継がれる)

ゼロ値

  • スライスのゼロ値はnilでlen=0,cap=0
2
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
2
0