reduceメソッド
CoddyのGDScriptジャーニー「ロジックとフロー」セクションの一部。レッスン 62/78。
reduce()は、配列のすべての要素を1つの値(合計、積、最大の要素、文など)にまとめます。
var numbers = [1, 2, 3, 4]
var total = numbers.reduce(func(acc, n): return acc + n, 0)
print(total)102つの引数を取ります。関数と開始値(ここでは0)です。関数は、これまでの結果であるアキュムレーター(acc)と次の要素を受け取ります。関数が返した値が新しいアキュムレーターになります。
accは0から始まります0 + 1は1、1 + 2は3、3 + 3は6、6 + 4は10です- 最後の要素の後、
reduce()はアキュムレーターを返します。10です
積の場合は、1から始めます。numbers.reduce(func(acc, n): return acc * n, 1)は24です。
開始値がない場合、最初の要素が開始値となり、関数は2番目の要素から実行されます。最大の要素を求めるのに適しています。
var biggest = [4, 9, 2].reduce(func(a, b): return a if a > b else b)
print(biggest) # 9開始値のない空の配列では、reduce()はnullを返すため、配列が空になる可能性がある場合は開始値を指定してください。
アキュムレーターはどのような型でもかまいません。開始値を "" にすると、各単語の最初の文字から文字列を作成します。
var words = ["game", "over"]
print(words.reduce(func(acc, w): return acc + w[0], "")) # goチャレンジ
簡単プログラムはカンマ区切りの整数を1行読み取り、配列 numbers に格納します。この部分はすでに書かれています。
それぞれについて reduce() を使い、3行出力してください。
- 数値の合計
- 数値の積
- 最大の数値(比較はラムダ式内に記述し、
max()は呼び出さないでください)
数値は常に少なくとも1つあります。入力が 3,7,2,8,4 の場合、出力は次のとおりです。
24
1344
8自分で試してみよう
extends Node
func _ready():
var numbers := []
for part in OS.read_string_from_stdin().split(","):
numbers.append(int(part))
# reduce() を使って、合計、積、最大の数をそれぞれ出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: GDScriptオンラインコンパイラ