Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ハマるスライスの話

 ハマるスライスの話

資料中に載せているリンクはこちら。
ハマったときのスライスのコード例(13ページ目)
https://play.golang.org/p/mvhWmDbCAAu

make関数とcopy関数のコード例その2(26ページ目)
https://play.golang.org/p/64yyeb0NJBp

make関数とcopy関数のコード例その2(28ページ目)
https://play.golang.org/p/_xZ2bqqSw5Y

読むと嬉しいページ(30ページ目)
https://blog.golang.org/go-slices-usage-and-internals
https://blog.golang.org/slices
https://www.techscore.com/tech/Go/Lang/Basic14/
https://www.techscore.com/tech/Go/Lang/Basic15/

つっちー

April 20, 2019
Tweet

More Decks by つっちー

Other Decks in Programming

Transcript

  1. s := []int{1, 2, 3, 4, 5, 6} ss :=

    s[2:5] s:[1 2 3 4 5 6] ss:[3 4 5] εϥΠεΛఆٛ͢Δ
  2. ss[2] = 500 s:[1 2 3 4 500 6] ss:[3

    4 500] ssͷ஋Λม͑Δ
  3. ss = append(ss, 10) s:[1 2 3 4 500 10]

    ss:[3 4 500 10] ssʹཁૉΛ௥Ճ͢Δ
  4. ss = append(ss, 20) s:[1 2 3 4 500 10

    ] ss:[3 4 500 10 20] ΋͏͍ͪͲssʹཁૉΛ௥Ճ͢Δ
  5. 1 sͷग़ྗ஋ ௕͞ɿ3 ΩϟύγςΟ: 4 2 3 4 5 6

    1 2 3 4 5 6 ϝϞϦ্ͷ ഑ྻ ssͷࢀরൣғ sͷࢀরൣғ 3 4 5 s := []int{1, 2, 3, 4, 5, 6} ss := s[2:5] sͱss͸ಉ͡ϝϞϦ্ͷ഑ྻ Λࢀর͢Δɻ εϥΠεΛίϐʔ͢Δͱ ࠷ॳͷࢦఆҐஔҎ߱͢΂ͯ ͷϝϞϦ্ͷ഑ྻΛࢀর͢Δɻ ͦͷͨΊɺ ssͷग़ྗ஋͸ <>͕ͩɺ ࢀরൣғ͸ϝϞϦ্ͷ Ҏ߱ɻ ssͷग़ྗ஋
  6. 1 sͷग़ྗ஋ ssͷग़ྗ஋ ௕͞ɿ3 ΩϟύγςΟ: 4 2 3 4 5

    6 1 2 3 4 500 6 ϝϞϦ্ͷ ഑ྻ sͷࢀরൣғ 3 4 500 ss͕ࢀর͍ͯ͠Δ ϝϞϦ্ͷ഑ྻ͕มߋ͞ΕΔɻ ss[2] = 500 ssͷࢀরൣғ
  7. 1 sͷग़ྗ஋ ௕͞ɿ3 ΩϟύγςΟ: 4 2 3 4 500 6

    1 2 3 4 500 6 ϝϞϦ্ͷ ഑ྻ sͷࢀরൣғ 1 2 500 ssͷग़ྗ஋ s͸ssͱಉ͡ϝϞϦ্ͷ഑ྻΛ ࢀর͍ͯ͠ΔͷͰɺ sͷग़ྗ݁Ռ΋มΘΔɻ ss[2] = 500 ssͷࢀরൣғ
  8. 1 sͷग़ྗ஋ ௕͞ɿ4 ΩϟύγςΟ: 4 2 3 4 500 6

    1 2 3 4 500 10 ϝϞϦ্ͷ ഑ྻ s1ͷࢀরൣғ sͷࢀরൣғ 1 2 500 10 append͸εϥΠεͷ ΩϟύγςΟʹ༨༟͕͋Δͱ͖ɺ εϥΠε͕ࢀর͍ͯ͠Δ ഑ྻͷ஋Λมߋ͢Δɻ ssͷग़ྗ஋ ss = append(ss, 10)
  9. 1 sͷग़ྗ஋ ௕͞ɿ4 ΩϟύγςΟ: 4 2 3 4 500 10

    1 2 3 4 500 10 ϝϞϦ্ͷ ഑ྻ s1ͷࢀরൣғ sͷࢀরൣғ 1 2 500 10 s͸ssͱಉ͡ϝϞϦ্ͷ഑ྻΛ ࢀর͍ͯ͠ΔͷͰɺ sͷग़ྗ݁Ռ΋มΘΔɻ ssͷग़ྗ஋ ss = append(ss, 10)
  10. 1 sͷग़ྗ஋ ssͷग़ྗ஋ ௕͞ɿ5 ΩϟύγςΟ: 8 2 3 4 500

    10 1 2 3 4 500 10 ϝϞϦ্ͷ ഑ྻ ssͷࢀরൣғ sͷࢀরൣғ 1 2 500 10 1 2 500 10 20 0 ϝϞϦ্ͷ ഑ྻ 0 0 20 ss = append(ss, 20) ΩϟύγςΟΛ௒͑ͯ ཁૉ͕௥Ճ͞ΕΔͱɺ ৽ͨͳϝϞϦ্ͷ഑ྻΛ࡞Γɺ ͦΕΛࢀর͢ΔΑ͏ͳΔɻ
  11. 1 sͷग़ྗ஋ ssͷग़ྗ஋ ௕͞ɿ5 ΩϟύγςΟ: 8 2 3 4 500

    10 1 2 3 4 500 10 ϝϞϦ্ͷ ഑ྻ sͷࢀরൣғ 1 2 500 10 ࢀর͍ͯ͠ΔϝϞϦͷ഑ྻ͕ ssͱҟͳΔͷͰɺ sͷ஋͸มΘΒͳ͍ɻ ΩϟύγςΟΛ௒͑Δͱ ࢀর͢ΔϝϞϦ͸2ഒʹͳΔɻ (ΩϟύγςΟ͸4 → 8ʹͳΔ) ssͷࢀরൣғ 1 2 500 10 20 0 ϝϞϦ্ͷ ഑ྻ 0 0 20 ss = append(ss, 20)
  12. ௕͞ɿ5 ΩϟύγςΟ: 8 1 sͷग़ྗ஋ ssͷग़ྗ஋ 2 3 4 500

    10 1 2 3 4 500 10 ϝϞϦ্ͷ ഑ྻ sͷࢀরൣғ 1 2 50000 10 ࢀর͍ͯ͠ΔϝϞϦͷ഑ྻ͕ ssͱҟͳΔͷͰɺ sͷ஋͸มΘΒͳ͍ɻ ssͷࢀরൣғ 1 2 50000 10 20 0 ϝϞϦ্ͷ ഑ྻ 0 0 20 ss͕ࢀর͍ͯ͠Δ ϝϞϦ্ͷ഑ྻ͕มߋ͞ΕΔɻ ss[2] = 50000
  13. s:[1 2 3 4 5 6] s1:[1000 4 5] //

    スライスsを定義 s := []int{1, 2, 3, 4, 5, 6} fmt.Printf("s:%d\n", s) // 長さ3、キャパシティ6のスライスssを定義 ss := make([]int, 3, 6) // copy組み込み関数を使って、sの値をssにコピー c := copy(ss, s[2:5]) fmt.Printf("ss:%d\n", ss) fmt.Printf("コピーした要素の数:%d\n\n", c) // ssの値を変更 fmt.Println("--ssの値を変更--") ss[0] = 1000 fmt.Printf("s:%d\n", s) fmt.Printf("ss:%d\n", ss) make関数を使って ssが参照するメモリ上の配列を 作成する。 copy関数を使ってsの値をssに コピーする。 https://play.golang.org/p/64yyeb0NJBp
  14. make関数を使って 長さ1のスライスs1を作成する。 s1:[3] コピーした要素の数:1 // スライスsを定義 s := []int{1, 2,

    3, 4, 5, 6} fmt.Printf("s:%d\n", s) // 長さ1、キャパシティ6のスライスssを定義 ss := make([]int, 1, 6) // copy組み込み関数を使って、sの値をssにコピー c := copy(ss, s[2:5]) fmt.Printf("ss:%d\n", ss) fmt.Printf("コピーした要素の数:%d\n", c) copy関数を使ってsの値をコピーする https://play.golang.org/p/_xZ2bqqSw5Y
  15. EOL