Menu
CoddyTech

map 方法

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

高阶函数是指将另一个函数作为参数的函数。数组有好几个这样的函数,map() 是第一个。

map() 会对数组中的每个元素调用一个函数,并按相同顺序返回一个包含结果的新数组:

func square(n):
	return n * n
var numbers = [1, 2, 3, 4, 5]
var squares = numbers.map(square)
print(squares)
[1, 4, 9, 16, 25]

按函数名传递函数,不要加括号:map(square)会把函数传过去,而map(square())会尝试立即调用它。然后,map()会为每个元素调用一次该函数:1变成1,2变成4,3变成9,依此类推。

对于简单的计算,使用 lambda 可以省去单独定义函数:

var squares = numbers.map(func(n): return n * n)

新数组的大小与原数组相同,而且 numbers 本身不会改变。结果的类型可以与元素的类型不同:

var words = ["apple", "kiwi", "banana"]
print(words.map(func(w): return w.length()))
[5, 4, 6]

map() 返回的是普通的 Array,即使你在 Array[int] 这样的类型化数组上调用它也是如此。将结果存入 Array[int] 变量会导致程序报错,因此请将它存入未指定类型的变量或 Array 中。

split() 返回一个 PackedStringArray,它没有 map()。先把它转换成 Array:Array("1,2,3".split(",")).map(func(s): return int(s)) 会得到 [1, 2, 3]。

challenge icon

挑战

简单

编写一个名为 convert_to_uppercase 的函数,它接收一个由字符串组成的数组 strings,并返回一个新数组,其中每个字符串都转换为大写。

使用带有 lambda 的 map(),不要使用循环。例如,convert_to_uppercase(["hello", "world"]) 会返回 ["HELLO", "WORLD"]。

测试会自行调用 convert_to_uppercase()。不要调用它,也不要打印任何内容。

亲手试试

func convert_to_uppercase(strings: Array[String]):
	# 在这里编写代码
	pass
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: GDScript 在线编译器