Menu
CoddyTech

Метод reduce

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