[Go] スライスやマップで、要素の数だけループさせたいときの、len関数やrangeのサンプル

1. スライス × len関数 でのループ処理

サクッと動作確認

コード本体

package main
import "fmt"

func main() {
    s := []int{2, 4, 6, 8}
    for i := 0; i < len(s); i++{
        fmt.Println(i,s[i])
    }
}

2. マップ × len関数 でのループ処理 (※不可!!)

不可
mapだと、実行の度に出力される要素の順番がランダム化される。(v1.11以下の場合。)
つまり、そもそもキーが指定できない。(または理想的ではない。)

ちなみに、len関数で要素数を取得するところまでは可能です↓

サクッと動作確認

コード本体

package main
import "fmt"

func main() {
    m := map[string]int{"maeda":165, "yamada":175, "suzuki":180}
    fmt.Println(len(m))  // => 3
}

3.スライス × range でのループ処理

サクッと動作確認

コード本体

package main
import "fmt"

func main() {
    s := []int{2, 4, 6, 8}
    for i ,v := range s {
        fmt.Println(i, v)
    }
}

4.マップ × range でのループ処理

サクッと動作確認

コード本体

package main
import "fmt"

func main() {
    m := map[string]int{"maeda":165, "yamada":175, "suzuki":180}
    for k, v := range m {
        fmt.Println(k, v)
    }
}

結論

  • マップでは、len関数が使えない。
    • そのため、マップでの場合はrange一択になる。
  • スライスでは、len関数もrangeも両方使える。
  • rangeはマップでもスライスでも、要素数ループができる。

PON3

PON3

5年くらい前に、30代完全未経験から独学でWeb系のソフトウェアエンジニアになった人。 現在はフリーランスエンジニアとして、大阪の自宅からフルリモートで東京の自社開発企業のお仕事をしている。 主戦場はバックエンドで、Go言語でのAPI開発や、Pythonでのデータ分析が武器。 とは言いつつ、フロントエンドをSPAを実装したり、IaCでクラウドインフラの設計構築したり、スクラム開発でプロジェクト運営したりするなんでも屋。 いつも、ググってきては誰かが書いてくれた記事を見て開発していたが、もらってばかりでなく世の中に返すこともしたいと思い、技術ブログをはじめる。 妻と2歳になる娘の3人暮らし。 何かご用件がある方は、TwitterのDMからどうぞ。