🏮

Go言語のrangeを追加反復処理をする

2023/06/28に公開

rangeを使ってみた

公式の解説を翻訳しております

rangeは様々なデータ構造の要素を反復処理する。すでに学んだデータ構造のいくつかを使って、rangeの使い方を見てみよう。

ここでは範囲を使ってスライス内の数値を合計している。配列もこのように動作する。

の範囲は、各エントリのインデックスと値の両方を提供します。上ではインデックスは必要なかったので、空白の識別子 _ を使って無視しました。しかし、実際にはインデックスが必要なこともあります。

の範囲は、キーと値のペアを反復処理します。

範囲は、マップのキーだけを反復処理することもできる。

文字列の範囲は、Unicode コード・ポイントを繰り返し処理します。最初の値はルーンの開始バイトインデックスで、2番目はルーンそのものです。詳細は文字列とルーンを参照してください。

package main

import "fmt"

func main() {
    // numsは、int型のスライス
    nums := []int{2, 3, 4}
    // sumは、int型
    sum := 0
    // _,は、インデックスを無視することを示す
    // rangeは、スライスやマップを反復処理する
    for _, num := range nums {
        sum += num
    }
    fmt.Println("sum:", sum)
    // rangeは、インデックスと値の両方を返す
    for i, num := range nums {
        // num == 3のとき、iを出力する
        if num == 3 {
            fmt.Println("index:", i)
        }
    }
    // kvsは、map[string]string型
    kvs := map[string]string{"a": "apple", "b": "banana"}
    // for k, v := range kvsは、mapのキーと値を反復処理する
    for k, v := range kvs {
        fmt.Printf("%s -> %s\n", k, v)
    }
    // for k := range kvsは、mapのキーを反復処理する
    for k := range kvs {
        fmt.Println("key:", k)
    }
    // for i, c := range "go"は、文字列の文字とそのインデックスを反復処理する
    for i, c := range "go" {
        fmt.Println(i, c)
    }
}

実行結果

sum: 9
index: 1
a -> apple
b -> banana
key: a
key: b
0 103
1 111

まとめ

今回は、前回学んだ文法を活かして、rangeは、スライスやマップを反復処理する文法だとわかった⭕️

Jboy王国メディア

Discussion