> Можно ли применять вложенные циклы и как оптимизировать алгоритмы (iOS, Swift)

Уровень: senior · Роль: mobile · Категория: Технические вопросы

Компании: Битрикс24

Стек: iOS, Swift

> Пример ответа

Да, вложенные циклы в Swift применять можно, и это часто необходимо при работе с многомерными массивами, матрицами или при сравнении элементов коллекций. Однако их использование может привести к квадратичной или более высокой сложности (O(n²), O(n³)), что критично для мобильных устройств с ограниченными ресурсами.

Основные подходы к оптимизации:

  1. Снижение размерности - по возможности замените вложенные циклы на однопроходные алгоритмы. Например, для поиска дубликатов используйте Set вместо двойного цикла:

    SWIFT
    let array = [1, 2, 3, 2, 4]
    var seen = Set<Int>()
    for element in array {
    if seen.contains(element) {
    print("Дубликат: \(element)")
    }
    seen.insert(element)
    }
  2. Ранний выход (break/continue) - если условие выполняется, прерывайте внутренний цикл. Для поиска первого совпадения используйте first(where:).

  3. Кэширование результатов - избегайте повторных вычислений внутри цикла. Вынесите инвариантные операции наружу:

    SWIFT
    let count = array.count // вычисляется один раз
    for i in 0..<count {
    // ...
    }
  4. Использование высокоуровневых функций - map, filter, reduce часто оптимизированы компилятором и могут быть быстрее ручных циклов.

  5. Распараллеливание - для тяжелых вычислений на многоядерных устройствах применяйте DispatchQueue.concurrentPerform или OperationQueue.

  6. Алгоритмическая замена - например, для поиска пар с заданной суммой вместо O(n²) используйте словарь (O(n)).

Пример оптимизации:
Вместо:

SWIFT
for i in 0..<n {
for j in 0..<m {
if matrix[i][j] == target { ... }
}
}

Используйте одномерное представление или бинарный поиск, если матрица отсортирована.

Важно помнить: профилируйте код с помощью Instruments, прежде чем оптимизировать. Иногда вложенные циклы с малым количеством итераций (например, 3×3) не требуют изменений.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью