#for文(繰り返し制御)
配列から要素を一つずつ取り出せるようになります。GO言語の繰り返し処理には、while文(データの個数がわからない時に使用する条件式)が無くシンプルにfor文というデータの個数分までループ構造を繰り返す処理のみになります。for スタート値; 継続条件; 増減式 { }
スタート値は第一引数にあたり、繰り返し処理をスタートさせる値になります。変数名にi(indexやintegerの頭文字)が使われるのが一般的です。0からスタートとなるカウンタ変数(アクションの実行回数)を省略形**(:=)で代入し定義します。継続条件の部分は繰り返しをやめるまでの条件としてブール値を返す式を記述します。通常はiの値に関する式となり、式の値がfalseとなったら繰り返しをやめ、{ }の中から抜けることになります。例としてi <= 4;
i < len(aprices)
を記述します。増減式は1回の繰り返し処理で1ずつ増やすインクリメント演算子「++」を使用します「i++」**は、「i += 1」の略です。{ }波括弧の中には繰り返したい処理を書き、ループの条件を判定させます。(繰り返し処理の終わり)まずは、0からスタートさせて5回で終わらせる処理を記述してみます。
package main
import "fmt"
func main() {
for i := 0; i <= 4; i++ {
fmt.Println(i)
}
}
##実行結果
0
1
2
3
4
「変数iを用いた処理を行って、終わったらiを増やす。iの値が条件に達していない場合は処理を繰り返す。」では次に、スライスでpricesから見ている配列のi番目の要素の値を取り出して、文字列に埋め込み出力させてみます。
package main
import "fmt"
func main() {
prices := []int{99, 122, 233, 456, 1023}
for i := 0; i < len(prices); i++ {
fmt.Printlf("%d円\n", prices[i])
}
}
##実行結果
99円
122円
233円
456円
1023円
#スライス型で文字列の配列を定義
goods := []string{"割り箸","紙コップ","ゴミ袋","テーブルクロス","大皿"}
を、上記のshopsに追加し書式fmt.Printf("%s: %d円\n", goods[i], prices[i])
に書き加えます。更に一つずつ小計も同時に表示できるよう記述してみます。for文の前に変数sumを作りsum := 0
を入れ、for文の中の処理を繰り返しごとにsumの値が増えるようsum += prices[i]
fmt.Printf("%s: %d円 | 小計: %d円\n", goods[i], prices[i], sum)
に修正しfmt.Printf("総計: %d円\n", sum)
で繰り返し終了後にsumの値を表示させてみます。
package main
import "fmt"
func main() {
prices := []int{99, 122, 233, 456, 1023}
goods := []string{"割り箸","紙コップ","ゴミ袋","テーブルクロス","大皿"}
sum := 0
for i := 0; i < len(prices); i++ {
sum += prices[i]
fmt.Printf("%s: %d円 | 小計: %d円\n", goods[i], prices[i], sum)
}
fmt.Printf("総計: %d円\n", sum)
}
##ファイルを再ビルドして実行
割り箸: 99円 | 小計: 99円
紙コップ: 122円 | 小計: 221円
ゴミ袋: 233円 | 小計: 454円
テーブルクロス: 456円 | 小計: 910円
大皿: 1023円 | 小計: 1933円
総計: 1933円
#2次元配列上での繰り返し処理
魚釣りの大会が開かれたと仮定して、釣った魚3匹の大きさ(cm)の合計を「配列の配列」である2次元配列を使って各参加者の平均サイズを出力してみます。尚、釣れなかった人は0でカウントします。
package main
import "fmt"
func main() {
average := [][3]int{
{23, 25, 45}, {42, 0, 0}, {12, 33, 18},
{32, 35, 14}, {39, 45, 0}}
for i := 0; i < len(average); i++ {
sum := 0
for b := 0; b < 3; b++ {
sum += average[i][b]
}
fmt.Printlf("参加者%d: 平均サイズ%dcm\n", i+1, sum/3)
}
}
##実行結果
参加者1: 平均サイズ31cm
参加者2: 平均サイズ14cm
参加者3: 平均サイズ21cm
参加者4: 平均サイズ27cm
参加者5: 平均サイズ28cm
変数averageに代入しているのはスライスで、そのスライスが見る配列要素はint{ }内にある要素{23, 25, 45}
のような配列です。for文を定義するには、まず外枠の配列について変数iで繰り返すごとに、変数bで内側の配列について繰り返させます。次に各iに対し、average[i]が持っている3つの要素の平均をさせます。参加者の番号をi+1
で出力させます。処理が終わるとfor文の一番最初に戻り、iが1増えて、i<len(average)
がtrueであれば、新しいiの値で、bが0からの繰り返しを始めます。