Дополнительные возможности

Домашняя работа к главе 17

Задание 1

Ранее мы с вами уже решали данное задание:
Напишите функцию, которая принимает на вход массив с элементами типа 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

 

Задание 2

Напишите функция, которая принимает на вход массив типа [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]

 

Задание 3

Повтор задания из главы 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

Доступ закрыт

Дополнительные 3 задания доступны только подписчикам

Оформить доступ


5 Comments

  1. Vlados:

    задание 3 (альт. вариант)
    func multiplyArray (_ a: [Int]) -> Int {
    if a.isEmpty {
    return(0)
    }else{
    return a.reduce(1, *)
    }
    }
    multiplyArray([1,2,3,4]) //24
    multiplyArray([]) //0

  2. torin.dmitriy:

    Вариант решения для задачи 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
    }))
    }

  3. apyeshhi:

    Вариант решения задания 3func arrayTest3(a: [Int])->Int{    return a.count > 0 ? a.reduce(1, *) : 0}arrayTest3(a: [1,2,3,4])

  4. apyeshhi:

    Извиняюсь, код не сохранил свою читабельность при оформлении коммента.

  5. mechnik008:

    задание 3 можно решить еще так
    func multiplicationValueInArray (_ array: [Int]) -> Int {
    array.count > 0 ? array.reduce(1, *) : 0
    }

Добавить комментарий