Функции высшего порядка превосходят циклы по производительности, а код намного короче, поэтому по возможности лучше использовать функции высшего порядка. На самом деле разработчики, которые зарабатывают много денег, любят функции высшего порядка! Но в прошлом мне также было трудно понять функции высшего порядка. Я объясню это самым простым способом в мире, так что давайте посмотрим на это один за другим.
Что такое функции высшего порядка?
- Функция высшего порядка — это функция, которая получает в качестве аргумента другую функцию или возвращает результат выполнения функции как функции.
- Поскольку функции Swift (замыкания) являются гражданами первого класса, их можно передавать в качестве аргументов функциям и возвращать в качестве результата функции.
Вы не понимаете? Не волнуйся. Просто продолжайте дальше!
карта
- Карта возвращает новый массив той же длины.
Пример 1)
let string = ["1", "2", "3", "4", "5"]
let numbers = string.map { Int($0)! }
print(numbers)
// [1, 2, 3, 4, 5]
Теперь вы видите новый массив, элементы которого преобразованы в int
.
Пример 2)
// multiply 9 to each element
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
let multiplyArray: [Int] = numbers.map { $0 * 9 }
print(multiplyArray)
// [9, 18, 27, 36, 45, 54, 63, 72, 81]
Теперь каждый элемент числа умножается на 9.
Обзор карты()
map()
перебирает все элементы массива.map()
принимает в качестве параметра элементы исходного массива.map()
возвращает преобразованное значение в соответствии с определенным типом замыкания.
Фильтр
- Фильтр возвращает новый массив с условием.
- Отфильтрованный массив может иметь разную длину.
Пример )
// print only even numbers
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
let evenNumbers = numbers.filter { $0 % 2 == 0 }
print(evenNumbers)
// [2, 4, 6, 8]
Если каждый элемент соответствует определенному условию, его элемент добавляется в новый массив. В этом примере условие определено как $0 % 2 == 0
.
Сводка filter()
filter()
возвращает значение, удовлетворяющее условию из исходного массива,filter()
можно удобно использовать при извлечении нужных данных.
Уменьшить
- Возвращает результат объединения элементов последовательности с помощью заданного замыкания.
Пример 1)
// Get sum
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let sum = numbers.reduce(0) { $0 + $1 }
print(sum)
// 55
Это немного сложнее, чем другие функции более высокого порядка. Что вам нужно знать, что аргумент first
принимает initialValue
, а второй аргумент возвращает замыкание. Этот второй аргумент, closure
, имеет два параметра. Первый аргумент — это результат операции, а второй аргумент — array element
. Типа трудно понять? Я знаю это. Просто практика практика практика. Самостоятельное написание кода может помочь вам понять его намного лучше.
Пример 2)
// get multiplied result
let numbers = [1, 2, 3, 4, 5]
let sum = numbers.reduce(1) { $0 * $1 }
print(sum)
// 120
Сводка по уменьшению()
reduce()
принимает начальное значение в качестве первого аргумента- Второй аргумент
reduce()
— закрытие - Закрытие второго аргумента
reduce()
принимает два аргумента. Его первый аргумент — это результат, а второй аргумент — элемент массива.
Заключение
Я рекомендую вам использовать функцию высшего порядка, когда это возможно. Это значительно повысит вашу производительность и производительность программного обеспечения. map()
и filter()
интуитивно понятны. Но reduce()
немного сложно понять. Чтобы понять reduce
, когда вам нужны sum
multiply
и другие подобные операции, попробуйте использовать reduce()
. Делая это, это будет вашей второй натурой.