Какой вывод получим в примере №20

Вывод: [Optional(2), nil, Optional(2), Optional(2), nil], затем 3 и 6. Внутренний nil учитывается как элемент массива.

Короткий ответ

Что ответить на собеседовании

Вывод: [Optional(2), nil, Optional(2), Optional(2), nil], затем 3 и 6. Внутренний nil учитывается как элемент массива.

Подробный разбор

Ответ с пояснениями

Условие

В данном примере рассматривается массив, который может содержать как вложенные массивы, так и nil. Необходимо понять, какие значения будут напечатаны после выполнения трёх последовательных операторов print. Обратите внимание на различия между методами map, compactMap и flatMap при работе с опциональными элементами.

let matrix = [[1, 2], nil, [3, 4], [nil, 5], nil]

print(matrix.map { $0?.count })
print(matrix.compactMap { $0 }.count)
print(matrix.compactMap { $0 }.flatMap { $0 }.count)

Ответ

Вывод: [Optional(2), nil, Optional(2), Optional(2), nil], затем 3 и 6. Внутренний nil учитывается как элемент массива.

map сохраняет пять внешних позиций и возвращает optional-длину каждого непустого массива. compactMap { $0 } удаляет только внешние nil, поэтому остаётся три массива: [1,2], [3,4], [nil,5]. Последующий flatMap снимает один уровень вложенности и даёт шесть элементов, включая внутренний nil. Чтобы получить пять чисел, после объединения нужно ещё раз удалить nil через compactMap.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее