つくる: 商品集計
条件付きの集計
第3章の内容を全部使います。新しい知識は出てきません。
プレーンテキスト
if 条件で分ける
for 繰り返す
continue 条件に合わないものを飛ばす
集計 合計・件数・平均作るのは、売切れを除いた集計です。
プレーンテキスト
販売中2件 合計2199円 平均1099円 (除外1件)2つの並びを同時に見る
価格の並びと、売切れかどうかの並びを受け取ります。同じ添字が同じ商品を指します。
プレーンテキスト
prices [1200, 999, 24800]
soldOut [false, false, true]
↑同じ商品1つの for で両方を見ます。
Go
for i := 0; i < len(prices); i++ {
if soldOut[i] {
continue
}
// ここに来るのは販売中のものだけ
}continue で先に弾くと、集計の本筋が右に寄らずに済みます。前のレッスンで触れた形です。
数える対象が2つある
集めるものが増えます。
プレーンテキスト
販売中の件数
販売中の合計
除外した件数それぞれ入れ物を用意して、ループの中で更新します。continue で飛ばす直前に、除外の数を1つ増やしてください。
Go
if soldOut[i] {
skipped++
continue
}順番が逆だと数えられません。continue から先は実行されないからです。
全部が売切れのとき
販売中が0件になります。ここで平均を出すと 0 で割ることになります。
プレーンテキスト
販売中0件 (除外3件)合計と平均を書かない形にしてください。前のレッスンでやった、0件を先に弾く判断がそのまま出てきます。
順番に作る
プレーンテキスト
1. 全件を合計する(売切れを無視)
2. continue で売切れを飛ばす
3. 除外の件数を数える
4. 販売中が0件のときを分ける1段ごとにテストを流してください。
要件
- 売切れの商品は集計から外し、除外の件数として数える
- 販売中が1件以上なら
販売中N件 合計M円 平均K円 (除外L件)を返す - 販売中が0件なら
販売中0件 (除外L件)を返す - 平均は販売中の合計を販売中の件数で割る
入出力例
onSaleSummary([1200,999,24800], [false,false,true]) → "販売中2件 合計2199円 平均1099円 (除外1件)"
onSaleSummary([1000,2000], [false,false]) → "販売中2件 合計3000円 平均1500円 (除外0件)"
onSaleSummary([1000,2000,3000], [true,true,true]) → "販売中0件 (除外3件)"
onSaleSummary([1200,999], [false,true]) → "販売中1件 合計1200円 平均1200円 (除外1件)"ヒント
編集 ゆめさく編集部