Функции высшего порядка превосходят циклы по производительности, а код намного короче, поэтому по возможности лучше использовать функции высшего порядка. На самом деле разработчики, которые зарабатывают много денег, любят функции высшего порядка! Но в прошлом мне также было трудно понять функции высшего порядка. Я объясню это самым простым способом в мире, так что давайте посмотрим на это один за другим.

Что такое функции высшего порядка?

  • Функция высшего порядка — это функция, которая получает в качестве аргумента другую функцию или возвращает результат выполнения функции как функции.
  • Поскольку функции 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(). Делая это, это будет вашей второй натурой.