Массив <T>
Array
универсальный тип, управляющий упорядоченным набором элементов, все из которых должны иметь тот же базовый тип (T
).
Для получения дополнительной информации о Array
, посмотрите Типы Набора.
Создание массива
init ()
Создает пустой массив типа T
.
Объявление
init()
Обсуждение
Создание массива с помощью этого инициализатора:
var emptyArray = Array<Int>()
эквивалентно использованию синтаксиса удобства:
var equivalentEmptyArray = [Int]()
init (count:repeatedValue:)
Создает массив с данным числом элементов, каждый инициализированный к тому же значению.
Объявление
init(count: Int, repeatedValue: T)
Обсуждение
Полученный массив будет иметь count
элементы в нем, каждый инициализированный к тому же значению обеспечил как значение для repeatedValue
.
Например:
let numericArray = Array(count: 3, repeatedValue: 42)
// numericArray is [42, 42, 42]
let stringArray = Array(count: 2, repeatedValue: "Hello")
// stringArray is ["Hello", "Hello"]
Доступ к элементам матрицы
нижний индекс (_: Интервал)
Получает или устанавливает существующие элементы в массиве с помощью преобразования в нижний индекс квадратной скобки.
Объявление
subscript(index: Int) -> T
Обсуждение
Используйте преобразование в нижний индекс для доступа к отдельным элементам в любом массиве:
var subscriptableArray = ["zero", "one", "two", "three"]
let zero = subscriptableArray[0]
// zero is "zero"
let three = subscriptableArray[3]
// three is "three"
Если Вы объявляете массив с помощью var
ключевое слово (т.е. как переменная), можно также использовать преобразование в нижний индекс для изменения значения любого существующего элемента в массиве:
subscriptableArray[0] = "nothing"
subscriptableArray[3] = "three items"
Не возможно вставить дополнительные элементы в преобразование в нижний индекс использования массива:
subscriptableArray[4] = "new item"
// Fatal error: Array index out of range
Если Вы хотите добавить дополнительные элементы к массиву, используйте append(_:)
метод или +=
оператор вместо этого.
Вы не можете использовать преобразование в нижний индекс для изменения значения любого существующего элемента в массиве, что Вы объявляете использование let
ключевое слово (т.е. как константа):
let constantArray = ["zero", "one", "two", "three"]
constantArray[0] = "nothing"
// Error: cannot mutate a constant array
нижний индекс (_: Диапазон <Интервал>)
Получает или устанавливает поддиапазон существующих элементов в массиве с помощью преобразования в нижний индекс квадратной скобки с целочисленным диапазоном.
Объявление
subscript(subRange: Range<Int>) -> Slice<T>
Обсуждение
Используйте преобразование в нижний индекс диапазона для доступа к одному или более существующим элементам в любом массиве:
var subscriptableArray = ["zero", "one", "two", "three"]
let subRange = subscriptableArray[1...3]
// subRange = ["one", "two", "three"]
Если Вы объявляете массив с помощью var
ключевое слово (т.е. как переменная), можно также использовать преобразование в нижний индекс для изменения значений диапазона существующих элементов:
subscriptableArray[1...2] = ["oneone", "twotwo"]
// subscriptableArray is now ["zero", "oneone", "twotwo", "three"]
Вы не должны обеспечивать то же число элементов, как Вы заменяете:
subscriptableArray[1...2] = []
// subscriptableArray is now ["zero", "three"]
Не возможно вставить дополнительные элементы в преобразование в нижний индекс использования массива:
subscriptableArray[4...5] = ["four", "five"]
// Fatal error: Array replace: subRange extends past the end
Если Вы хотите добавить дополнительные элементы к массиву, используйте append(_:)
метод или +=
оператор вместо этого.
Вы не можете использовать преобразование в нижний индекс для изменения любых значений в массиве, что Вы объявляете использование let
ключевое слово (т.е. как константа):
let constantArray = ["zero", "one", "two", "three"]
constantArray[1...2] = []
// Error: cannot mutate a constant array
Добавление и удаление элементов
добавьте (_:)
Добавляет новый элемент как последний элемент в существующем массиве.
Объявление
mutating func append(newElement: T)
Обсуждение
Используйте этот метод для добавления нового элемента к существующему массиву. Новый элемент будет добавлен как последний элемент в наборе:
var array = [0, 1]
array.append(2)
// array is [0, 1, 2]
array.append(3)
// array is [0, 1, 2, 3]
Если Вы объявили массив с помощью, можно только добавить новые значения к массиву var
ключевое слово (т.е. как переменная и не константа):
let constantArray = [0, 1]
constantArray.append(2)
// Error: cannot mutate a constant array
вставьте (_: atIndex:)
Вставляет элемент в набор в данном индексе.
Объявление
mutating func insert(newElement: T, atIndex i: Int)
Обсуждение
Используйте этот метод для вставки нового элемента где угодно в диапазоне существующих элементов, или как последний элемент:
var array = [1, 2, 3]
array.insert(0, atIndex: 0)
// array is [0, 1, 2, 3]
Индекс должен быть меньше чем или равен числу элементов в наборе. При попытке вставить элемент в большем индексе, то Вы инициируете утверждение:
array.insert(6, atIndex: 6)
// Fatal error: Array replace: subRange extends past the end
Если Вы объявили массив с помощью, можно только вставить новые значения в массив var
ключевое слово (т.е. как переменная и не константа):
let constantArray = [1, 2, 3]
constantArray.insert(0, atIndex: 0)
// Error: cannot mutate a constant array
removeAtIndex (_:)
Удаляет элемент в данном индексе и возвращает его.
Объявление
mutating func removeAtIndex(index: Int) -> T
Обсуждение
Используйте этот метод для удаления элемента в данном index
. Возвращаемое значение метода является элементом, удаленным:
var array = [0, 1, 2, 3]
let removed = array.removeAtIndex(0)
// array is [1, 2, 3]
// removed is 0
Индекс должен быть меньше, чем число элементов в наборе. При попытке удалить элемент в большем индексе, то Вы инициируете утверждение:
array.removeAtIndex(5)
// Fatal error: Array index out of range
Если Вы объявили массив с помощью, можно только удалить элемент из массива var
ключевое слово (т.е. как переменная и не константа):
let constantArray = [0, 1, 2]
constantArray.removeAtIndex(0)
// Error: cannot mutate a constant array
removeLast ()
Удаляет последний элемент из набора и возвращает его.
Объявление
mutating func removeLast() -> T
Обсуждение
Используйте этот метод для удаления последнего элемента в получателе. Возвращаемое значение метода является элементом, удаленным:
var array = [1, 2, 3]
let removed = array.removeLast()
// array is [1, 2]
// removed is 3
Должен быть по крайней мере один элемент в массиве перед вызовом этого метода — при вызове этого метода на пустом массиве Вы инициируете утверждение:
var emptyArray = [Int]()
let tryToRemove = emptyArray.removeLast()
// Fatal error: can't removeLast from an empty Array
Если Вы объявили массив с помощью, можно только удалить последний элемент из массива var
ключевое слово (т.е. как переменная и не константа):
let constantArray = [1, 2]
constantArray.removeLast()
// Error: cannot mutate a constant array
removeAll (keepCapacity:)
Удаляет все элементы из набора, и по умолчанию очищает буфер базовой системы хранения.
Объявление
mutating func removeAll(keepCapacity: Bool = default)
Обсуждение
Используйте этот метод для удаления всех элементов в массиве:
var array = [0, 1, 2, 3]
array.removeAll()
let count = array.count
// count is 0
Если Вы не укажете иначе, базовая внешняя память будет очищена.
Если Вы объявили массив с помощью, можно только удалить все элементы из массива var
ключевое слово (т.е. как переменная и не константа):
let constantArray = [1, 2]
constantArray.removeAll()
// Error: cannot mutate a constant array
reserveCapacity (_:)
Гарантирует, что базовая система хранения может содержать данное общее количество элементов.
Объявление
mutating func reserveCapacity(minimumCapacity: Int)
Обсуждение
Гарантируйте, что массив имеет достаточно непрерывной базовой внешней памяти для хранения общего количества элементов, указанных для minimumCapacity
.
Запросы массива
количество
Целочисленное значение, представляющее число элементов в массиве (только для чтения).
Объявление
var count: Int { get }
Обсуждение
Используйте это свойство только для чтения для запросов числа элементов в массиве:
var array = ["zero", "one", "two"]
let firstCount = array.count
// firstCount is 3
array += "three"
let secondCount = array.count
// secondCount is 4
isEmpty
Булево значение, определяющее, является ли массив пустым (только для чтения).
Объявление
var isEmpty: Bool { get }
Обсуждение
Используйте это свойство только для чтения, чтобы запросить, пуст ли массив:
var array = ["zero", "one", "two", "three"]
let firstCheck = array.isEmpty
// firstCheck is false
array.removeAll()
let secondCheck = array.isEmpty
// secondCheck is true
способность
Целочисленное значение, представляющее, сколько общие элементы массив могут сохранить без перераспределения (только для чтения).
Объявление
var capacity: Int { get }
Обсуждение
Используйте это свойство только для чтения для запросов, сколько общих элементов массив может сохранить, не инициировав перераспределение внешней памяти.
Алгоритмы
вид (_:)
Сортирует массив на месте с помощью данного закрытия для определения порядка предоставленной пары элементов.
Объявление
mutating func sort(isOrderedBefore: (T, T) -> Bool)
Обсуждение
Используйте этот метод для сортировки элементов в массиве. Закрытие, для которого Вы предоставляете isOrderedBefore
должен возвратить булево значение, чтобы указать, должен ли один элемент быть прежде (true
) или после (false
) другой элемент:
var array = [3, 2, 5, 1, 4]
array.sort { $0 < $1 }
// array is [1, 2, 3, 4, 5]
array.sort { $1 < $0 }
// array is [5, 4, 3, 2, 1]
Если Вы объявили массив с помощью, можно только сортировать массив на месте var
ключевое слово (т.е. как переменная):
let constantArray = [3, 2, 5, 1, 4]
constantArray.sort { $0 < $1 }
// Error: cannot mutate a constant array
сортированный (_:)
Возвращает массив, содержащий элементы от массива, сортированного с помощью данного закрытия.
Объявление
func sorted(isOrderedBefore: (T, T) -> Bool) -> [T]
Обсуждение
Используйте этот метод для возврата нового массива, содержащего сортированные элементы от массива. Закрытие, для которого Вы предоставляете isOrderedBefore
должен возвратить булево значение, чтобы указать, должен ли один элемент быть прежде (true
) или после (false
) другой элемент:
let array = [3, 2, 5, 1, 4]
let sortedArray = array.sorted { $0 < $1 }
// sortedArray is [1, 2, 3, 4, 5]
let descendingArray = array.sorted { $1 < $0 }
// descendingArray is [5, 4, 3, 2, 1]
реверс ()
Возвращает массив, содержащий элементы массива в обратном порядке индексом.
Объявление
func reverse() -> [T]
Обсуждение
Используйте этот метод для возврата нового массива, содержащего элементы массива в обратном порядке; т.е. последний элемент будет первым, предпоследнее будет вторым и т.д.:
let array = [1, 2, 3, 4, 5]
let reversedArray = array.reverse()
// reversedArray = [5, 4, 3, 2, 1]
фильтр (_:)
Возвращает массив, содержащий элементы массива, для которого предоставленное закрытие указывает соответствие.
Объявление
func filter(includeElement: (T) -> Bool) -> [T]
Обсуждение
Используйте этот метод для возврата нового массива путем фильтрации существующего массива. Закрытие, для которого Вы предоставляете includeElement:
должен возвратить булево значение, чтобы указать, должен ли элемент быть включен (true
) или исключенный (false
) от заключительного набора:
let array = [0, 1, 2, 3, 4, 5, 6, 7]
let filteredArray = array.filter { $0 % 2 == 0 }
// filteredArray is [0, 2, 4, 6]
карта (_:)
Возвращает массив элементов, созданных из результатов применения предоставленного закрытия преобразования для каждого элемента в массиве.
Объявление
func map<U>(transform: (T) -> U) -> [U]
Обсуждение
Используйте этот метод для возврата нового массива, содержащего результаты применения предоставленного закрытия для преобразования каждого элемента в существующий массив:
let array = [0, 1, 2, 3]
let multipliedArray = array.map { $0 * 2 }
// multipliedArray is [0, 2, 4, 6]
let describedArray = array.map { "Number: \($0)" }
// describedArray is [Number: 0, Number: 1, Number: 2, Number: 3]
сократите (_: объединение:)
Возвращает единственное значение, представляющее результат применения предоставленного закрытия сокращения для каждого элемента.
Объявление
func reduce<U>(initial: U, combine: (U, T) -> U) -> U
Обсуждение
Используйте этот метод для сокращения набора элементов вниз к единственному значению путем рекурсивного применения предоставленного закрытия:
let array = [1, 2, 3, 4, 5]
let addResult = array.reduce(0) { $0 + $1 }
// addResult is 15
let multiplyResult = array.reduce(1) { $0 * $1 }
// multiplyResult is 120
Два результата создают следующим образом:
Параметрами первому вызову закрытия является начальное значение, которое Вы предоставляете и первый элемент в наборе.
В
addResult
случай, означающийinitialValue
из0
и первый элемент1
:{ 0 + 1 }
.В
multiplyResult
случай, означающийinitialValue
из1
и первый элемент1
:{1 * 1}
.Затем, закрытие вызывают с предыдущим результатом как первый параметр и второй элемент как второй параметр.
В
addResult
случай, означающий результат1
и следующий элемент2
: {1 + 2}.В
multiplyResult
случай, означающий результат1
и следующий элемент2
: {1 * 2}.Закрытия продолжают быть вызванными с предыдущим результатом и следующим элементом как параметры:
В
addResult
означающий случай,{3 + 3}
,{6 + 4}
,{10 + 5}
, с конечным результатом15
.В
multiplyResult
означающий случай,{2 * 3}
,{6 * 4}
,{24 * 5}
, с конечным результатом120
.
Операторы
+=
Добавляет элементы последовательности или набора к существующему массиву.
Объявление
func +=<T, S: SequenceType where S.Generator.Element == T>(inout lhs: [T], rhs: S)
func +=<T, C: CollectionType where C.Generator.Element == T>(inout lhs: [T], rhs: C)
Обсуждение
+=
оператор предлагает простой способ добавить элементы последовательности или набора до конца существующего массива:
var array = [0, 1, 2, 3]
array += [4, 5, 6]
// array is [0, 1, 2, 3, 4, 5, 6]
Тип элементов в последовательности или наборе должен соответствовать тип существующих элементов в массиве:
array += ["hello"]
// Error: 'array' contains elements of type 'Int', not 'String'.
Можно только использовать +=
оператор для добавления элементов последовательности или набора к массиву, если Вы объявили массив с помощью var
ключевое слово (т.е. как переменная и не константа):
let constantArray = [0, 1, 2]
constantArray += [3]
// Error: cannot mutate a constant array