Ранее мы с вами уже решали данное задание:
Напишите функцию, которая принимает на вход массив с элементами типа Int
, а возвращает целое число — сумму всех положительных элементов переданного массива.
К примеру для массива [1,-2,3,4,-5]
должно быть возвращено 1+3+4 = 8
В данном случае вам потребуется использовать изученные в этой главе методы для того, чтобы найти наиболее оптимальное решение
func sumOfPositives (_ n: [Int] ) -> Int { return n.filter{ $0 > 0 }.reduce(0, +) } sumOfPositives([1,-2,3,4,-5]) //8
Напишите функция, которая принимает на вход массив типа [Int] и возвращает так же массив, но в котором все элементы исходного массива возведены в квадрат.
Пример:
[1,2,3,4] -> [1,4,9,16]
func squareArray(_ a : Array<Int>) -> Array<Int> { return a.map{$0*$0} } squareArray([1,2,3]) //[1, 4, 9]
Повтор задания из главы 15. В этот раз используйте изученные в данном разделе методы
Напишите функцию, которая принимает на вход массив типа [Int]
и, в случае, если количество элементов > 0, то возвращает целое число — произведение всех элементов переданной коллекции. Если количество элементов = 0, то возвращается 0.
Пример
[1,2,3,4] -> 1 * 2 * 3 * 4 = 24
func grow(_ a: [Int]) -> Int { if a.count > 0 { return a.reduce(1, *) }else{ return 0 } }
Обратите внимание, что Good Practice является стремление к использованию одной точки выхода из функции (один оператор return
)
В данном случае используется два оператора return
, а значит две точки выхода. Обусловлено это тем, что даже при таком подходе функция очень удобно читается и понимается. То есть это не влияет на удобство использования, а значит вполне допустимо.
grow([1,2,3,4]) //24 grow([]) //0
5 Comments
задание 3 (альт. вариант)
func multiplyArray (_ a: [Int]) -> Int {
if a.isEmpty {
return(0)
}else{
return a.reduce(1, *)
}
}
multiplyArray([1,2,3,4]) //24
multiplyArray([]) //0
Вариант решения для задачи 5:
func task5(_ str: String) -> String {
return String(str.flatMap({(c: Character) -> String in
let mapa = [
«0»:»-Zero-«,
«1»:»-One-«,
«2»:»-Two-«,
«3»:»-Three-«,
«4»:»-Four-«,
«5»:»-Five-«,
«6»:»-Six-«,
«7»:»-Seven-«,
«8»:»-Eight-«,
«9»:»-Nine-«,
]
guard let v = mapa[«\(c)»] else {
return «\(c)»
}
return v
}))
}
Вариант решения задания 3func arrayTest3(a: [Int])->Int{ return a.count > 0 ? a.reduce(1, *) : 0}arrayTest3(a: [1,2,3,4])
Извиняюсь, код не сохранил свою читабельность при оформлении коммента.
задание 3 можно решить еще так
func multiplicationValueInArray (_ array: [Int]) -> Int {
array.count > 0 ? array.reduce(1, *) : 0
}