Menu
CoddyTech

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)
10

2つの引数を取ります。関数と開始値(ここでは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
challenge icon

チャレンジ

簡単

プログラムはカンマ区切りの整数を1行読み取り、配列 numbers に格納します。この部分はすでに書かれています。

それぞれについて reduce() を使い、3行出力してください。

  1. 数値の合計
  2. 数値の積
  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() を使って、合計、積、最大の数をそれぞれ出力する
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン

自分で練習してみよう: GDScriptオンラインコンパイラ