Menu
CoddyTech

Метод map

Часть раздела Логика и потоки выполнения путешествия по GDScript на Coddy. Урок 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 и так далее.

Для короткого вычисления лямбда позволяет обойтись без отдельной функции:

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 и возвращает новый массив, в котором каждая строка записана в верхнем регистре.

Используй map() с лямбда-функцией, без циклов. Например, convert_to_uppercase(["hello", "world"]) возвращает ["HELLO", "WORLD"].

Тесты сами вызывают convert_to_uppercase(). Не вызывай эту функцию и ничего не выводи.

Попробуйте сами

func convert_to_uppercase(strings: Array[String]):
	# Напишите код здесь
	pass
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и потоки выполнения

Потренируйтесь самостоятельно: Онлайн-компилятор GDScript