что тут происходит? Изучаю 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 есть другие функции, но смысл их одинаковый, сократить написание циклов и описать только действия над элементами.
