LoginSignup
0
0

More than 3 years have passed since last update.

【Golang】スライス

Posted at

【Golang】スライス

Golangの基礎学習〜Webアプリケーション作成までの学習を終えたので、復習を兼ねてまとめていく。 基礎〜応用まで。

package main
//スライス 可変長配列
//関数では参照渡しされるので、本体の値も変わる。配列とは違う。

import "fmt"

func main() {
    //宣言
    //スライス = 可変長配列
    //[]にするとサイズ変更できる。
    var a []int = []int{100, 200}

    //宣言
    b := [] string{"A", "B"}
    fmt.Println(b)
    //>>[A, B]

    //宣言
    //[]を作る nil メモリーに確保しない。bとは違う。
    //メモリーは深い領域なので、最初は、あまり気にしなくてもいい
    var c []int
    fmt.Printf("len=%d cap=%d value=%v\n", len(b), cap(b), b)
    fmt.Printf("len=%d cap=%d value=%v\n", len(c), cap(c), c)
    fmt.Println(c)
    //>>[]





    //aに300を追加
    a = append(a, 300)
    fmt.Println(a)
    //>>[100, 200, 300]

    //代入
    a[0] = 1000
    fmt.Println(a)
    //>>[1000 200 300]


    //スライス作成
    d := []int{1, 2, 3, 4, 5, 6}
    fmt.Println(d)
    //値の取り出し
    fmt.Println(d[2])
    //>>3

    //2~4の前まで
    fmt.Println(d[2:4])

    //~2前まで
    fmt.Println(d[:2])

    //2~最後
    fmt.Println(d[2:])

    //全て
    fmt.Println(d[:])

    //copy コピー先、コピー元
    copy := copy(d, a)
    fmt.Println(copy)
    //成功したコピー数
    //>>3
    //先頭から塗りつぶすようにコピーする
    fmt.Println(d)
    //>>[1000 200 300 4 5 6]



    //簡易スライス式
    //完全スライス式 は省略
    //配列からスライスを作成する方法


    //リスト内リスト(スライス内スライス)
    var board = [][]int{
        []int{0, 1, 2},
        []int{3, 4, 5},
        []int{6, 7, 8},
    }
    fmt.Println(board)
    //>>[[0 1 2] [3 4 5] [6 7 8]]



    //スライスのmakeとcap
    //メモリーを気にするような開発の場合。
    //最初は気にせずやるほうがいい
    //#################################
    //make
    //make 長さ3, キャパシティ5 [0,0,0]のスライスを作成
    n := make([]int, 3, 5)

    //宣言 make
    //[]を作る 空 メモリーに確保する
    l := make([]int, 0)
    fmt.Println(l)
    //>>[]

    //len() 長さ
    //cap() キャパシティ(容量)
    //%d 整数
    fmt.Printf("len=%d cap=%d value=%v\n", len(n), cap(n), n)
    //>>len=3 cap=5 value=[0 0 0]

    //追加 長さ変更 [0,0,0,0,0]
    n = append(n, 0, 0)
    fmt.Printf("len=%d cap=%d value=%v\n", len(n), cap(n), n)
    //>>len=5 cap=5 value=[0 0 0 0 0

    //追加
    //[0,0,0,0,0,1,2,3,4,5]
    n = append(n, 1, 2, 3, 4, 5)
    //長さとキャパシティが変わる.10,10に
    fmt.Printf("len=%d cap=%d value=%v\n", len(n), cap(n), n)
    //>>len=10 cap=10 value=[0 0 0 0 0 1 2 3 4 5]

    //引数一つの場合 は長さ、キャパが同じ(今回は3)になる
    e := make([]int, 3)
    fmt.Printf("len=%d cap=%d value=%v\n", len(e), cap(e), e)
    //>>len=3 cap=3 value=[0 0 0]

    //#################################





    //for文
    // c = make([]int, 5)
    f := make([]int, 0, 5)
    for i := 0; i < 5; i++ {
        f = append(f, i)
        fmt.Println(f)
    }
    fmt.Println(f)

    /*答え
    [0]
    [0 1]
    [0 1 2]
    [0 1 2 3]
    [0 1 2 3 4]
    [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