🏮
Go言語のrangeを追加反復処理をする
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は、スライスやマップを反復処理する文法だとわかった⭕️
Discussion