Алгоритмы
Библиотека стандарта Swift содержит множество алгоритмов для помощи с общими задачами, включая сортировку, открытие и еще много.
Больше предстоящей информации.
Сортировка
вид (_:)
Сортирует массив сопоставимых элементов на месте.
Объявление
func sort<T: Comparable>(inout array: [T])
Обсуждение
Используйте эту функцию для сортировки непостоянного массива на месте с помощью <
оператор, требуемый соответствием к Comparable
протокол. Все элементы в массиве должны иметь типы, соответствующие Comparable
протокол, и <
оператор должен быть определен как строгое слабое упорядочивание по элементам:
var array = [5, 1, 6, 4, 2, 3]
sort(&array)
// array is [1, 2, 3, 4, 5, 6]
Можно только использовать эту функцию с массивом, объявленным с помощью var
ключевое слово (т.е. переменная):
let constantArray = [5, 1, 6, 4, 2, 3]
sort(&constantArray)
// Fatal Error: cannot mutate a constant array
Алгоритм сортировки не стабилен и таким образом может изменить относительное упорядочивание элементов, выдерживающих сравнение, равняется.
вид (_: _:)
Сортирует массив элементов на месте согласно указанному закрытию.
Объявление
func sort<T>(inout array: [T], isOrderedBefore: (T, T) -> Bool)
Обсуждение
Используйте эту функцию для сортировки непостоянного массива элементов на месте с помощью закрытия. Закрытие должно возвратить булево значение, чтобы указать, в порядке возрастания ли эти два элемента (true
) или порядок по убыванию (false
):
var array = [5, 1, 3, 4, 2, 6]
sort(&array) { $0 > $1 }
// array is [6, 5, 4, 3, 2, 1]
Можно только использовать эту функцию с массивом, объявленным с помощью var
ключевое слово (т.е. переменная):
let constantArray = [5, 1, 6, 4, 2, 3]
sort(&constantArray) { $0 > $1 }
// Fatal Error: cannot mutate a constant array
isOrderedBefore
закрытие должно определить строгое слабое упорядочивание по элементам в массиве.
Алгоритм сортировки не стабилен и таким образом может изменить относительное упорядочивание элементов для который isOrderedBefore
не устанавливает порядок.
сортированный (_:)
Возвращает массив, содержащий сортированные элементы последовательности.
Объявление
func sorted<C: SequenceType where C.Generator.Element: Comparable>(source: C) -> [C.Generator.Element]
Обсуждение
Используйте эту функцию для сортировки последовательности с помощью <
оператор, требуемый соответствием к Comparable
протокол. Все элементы в source
должен иметь типы, соответствующие Comparable
протокол, и <
оператор должен быть определен как строгое слабое упорядочивание по элементам:
let array = [5, 1, 6, 4, 2, 3]
let result = sorted(array)
// result is [1, 2, 3, 4, 5, 6]
Алгоритм сортировки не стабилен и таким образом может изменить относительное упорядочивание элементов, выдерживающих сравнение, равняется.
сортированный (_: _:)
Возвращает массив, содержащий сортированные элементы последовательности согласно указанному закрытию.
Объявление
func sorted<C: SequenceType>(source: C, isOrderedBefore: (C.Generator.Element, C.Generator.Element) -> Bool) -> [C.Generator.Element]
Обсуждение
Используйте эту функцию для сортировки последовательности с помощью закрытия. Закрытие должно возвратить булево значение, чтобы указать, в порядке возрастания ли эти два элемента (true
) или порядок по убыванию (false
):
let array = [5, 1, 3, 4, 2, 6]
let result = sorted(array) { $0 > $1 }
// result is [6, 5, 4, 3, 2, 1]
isOrderedBefore
закрытие должно определить строгое слабое упорядочивание по элементам в массиве.
Алгоритм сортировки не стабилен и таким образом может изменить относительное упорядочивание элементов для который isOrderedBefore
не устанавливает порядок.
Нахождение
найдите (_: _:)
Возвращает дополнительный индекс, содержащий результат попытки найти первый индекс, где данное значение появляется в указанном наборе.
Объявление
func find<C: CollectionType where C.Generator.Element: Equatable>(domain: C, value: C.Generator.Element) -> C.Index?
Обсуждение
Используйте эту функцию для нахождения первого индекса, где указанное значение появляется в наборе. Функция возвращает дополнительное индексное значение (C.Index?
) — если указанное значение не найдено, возвращенное индексное значение nil
. Все элементы в наборе должны иметь типы, соответствующие Equatable
протокол.
let array = [5, 1, 6, 4, 2, 3]
let valueToFind = 6
if let index = find(array4, valueToFind) {
println("Found the value \(valueToFind) at index \(index).")
} else {
println("Couldn't find the value \(valueToFind) in the array.")
}
// prints "Found the value 6 at index 2."