что тут происходит? Изучаю swift, не могу понять, почему такой сложный подсчет слов в строке обычной

class Solution {
func mostWordsFound(_ sentences: [String]) -> Int {
    sentences.reduce(0) { max($0, numWords($1)) }
}

func numWords(_ string: String) -> Int {
    string.reduce(1) { $0 + ($1 == " " ? 1 : 0)  }
  }
}

Ответы (1 шт):

Автор решения: Alex Krass

Функциональный подход позволяет записывать циклы гораздо компактнее и более понятно, посмотрите как работает функция reduce и разберите на примерах.

У вас есть начальное значение и функция обработки каждого элемента. Вместо того, чтобы писать циклы:

func mostWordsFound(_ sentences: [String]) -> Int {
    var initial = 0
    for str in sentences {
        initial = max(initial, numWords(str))
    }
    return initial
}

func numWords(_ string: String) -> Int {
    var initial = 1
    for str in string {
        initial = initial + (str == " " ? 1 : 0)
    }
    return initial
}

Гораздо удобнее увидеть, что у нас есть начальное значения и цикл, который каждый раз пересчитывает это значение в зависимости от текущего элемента и по окончанию возвращает результат вычислений.

введите сюда описание изображения

Помимо reduce есть другие функции, но смысл их одинаковый, сократить написание циклов и описать только действия над элементами.

→ Ссылка