[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はマップでもスライスでも、要素数ループができる。

PON

PON

30代で、完全未経験から独学でWeb系エンジニアになった人。 前職では、超絶ブラック企業にはまり込んでしまい、年間1200時間の残業をしていたが、娘が生まれたことで我に返って転職を決意。 現在は、大阪にあるベンチャー企業の自社開発プロジェクトで、リードエンジニアとして奮闘中。 主戦場はバックエンドで、Pythonでのデータ分析が武器。 とは言いつつ、SPAのフロントエンドを実装したり、インフラ設計したり、スクラム開発でプロジェクト運営したりするなんでも屋。 いつも、ググってきては誰かが書いてくれた記事を見て開発していたが、もらってばかりでなく世の中に返すこともしたいと思い、技術ブログをはじめる。 妻と1歳になる娘の3人暮らし。 最近は一日一食。 何かご用件がある方は、TwitterのDMからどうぞ。