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挑战
简单程序会读取一行用逗号分隔的整数,并将它们存储在数组 numbers 中。这部分代码已经写好。
分别使用 reduce(),打印三行:
- 这些数字的和
- 这些数字的乘积
- 最大的数字(在 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() 输出总和、乘积和最大值。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: GDScript 在线编译器