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

Домашняя работа к главе 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 задания доступны только подписчикам

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


2 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
    }))
    }

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