Menu
CoddyTech

reduce 方法

本课属于 Coddy GDScript 学习旅程的“逻辑与流程”单元。第 62 课,共 78 课。

reduce() 会将数组中的所有元素合并为一个值:总和、乘积、最大元素或句子。

var numbers = [1, 2, 3, 4]
var total = numbers.reduce(func(acc, n): return acc + n, 0)
print(total)
10

它接收两个参数:一个函数和一个初始值,这里是 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。

如果没有起始值,第一个元素就作为起始值,函数从第二个元素开始运行。这适用于找出最大的元素:

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

挑战

简单

程序会读取一行用逗号分隔的整数,并将它们存储在数组 numbers 中。这部分代码已经写好。

分别使用 reduce(),打印三行:

  1. 这些数字的和
  2. 这些数字的乘积
  3. 最大的数字(在 lambda 表达式中编写比较逻辑,不要调用 max())

输入中至少有一个数字。对于输入 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 在线编译器