Предположим, что у меня есть массив, например:
var myArray = ["Steve", "Bill", "Linus", "Bret"]
И позже я хочу нажать/добавить элемент в конец указанного массива, чтобы получить:
["Steve", "Bill", "Linus", "Bret", "Tim"]
Какой метод использовать?
А как насчет случая, когда я хочу добавить элемент в фронт массива? Есть ли постоянное временное смещение?
У вас было несколько вариантов добавления элемента в массив. В ранних бета-версиях вы могли бы использовать оператор + = для добавления отдельного элемента, но это уже не так. Тем не менее, вы можете использовать функцию добавления.
anArray.append("This String")
Если вы хотите добавить в свой массив больше элементов из другого массива, вы все равно можете использовать оператор + = или метод расширения.
anArray += ["Moar", "Strings"]
anArray.extend(["Moar", "Strings"])
Чтобы вставить один объект в начале массива, вы можете использовать метод insert.
anArray.insert("This String", atIndex: 0)
Чтобы вставить содержимое другого массива в начале массива, вы можете использовать метод сплайсинга.
anArray.insertContentsOf(["So", "Many", "Strings"], at: 0)
В случае insert и insertContentsOf аргумент seconds может быть любым допустимым индексом принимающего массива.
Более подробную информацию можно найти в главе "Типы коллекций" "Язык быстрого программирования", начиная со страницы 110.
Как и у Swift 3, приведенные выше примеры должны быть записаны следующим образом.
Чтобы добавить новый элемент в конец массива.
anArray.append("This String")
Чтобы добавить другой массив в конец вашего массива.
anArray += ["Moar", "Strings"]
anArray.append(contentsOf: ["Moar", "Strings"])
Чтобы вставить новый элемент в ваш массив.
anArray.insert("This String", at: 0)
Вставить содержимое другого массива в ваш массив.
anArray.insert(contentsOf: ["Moar", "Strings"], at: 0)
Вы также можете передать переменную и/или объект, если хотите.
var str1:String = "John"
var str2:String = "Bob"
var myArray = ["Steve", "Bill", "Linus", "Bret"]
//add to the end of the array with append
myArray.append(str1)
myArray.append(str2)
Чтобы добавить их в начало:
//use 'insert' instead of append
myArray.insert(str1, atIndex:0)
myArray.insert(str2, atIndex:0)
//Swift 3
myArray.insert(str1, at: 0)
myArray.insert(str2, at: 0)
Как уже было сказано, вы больше не можете использовать '+ =' от xCode 6.1
.prepend()
, вставка в .prepend()
кажется хорошим подходом
Чтобы добавить к концу, используйте оператор +=
:
myArray += ["Craig"]
myArray += ["Jony", "Eddy"]
Этот оператор эквивалентен методу append()
.
Там также insert(:, atIndex:)
для вставки в любой индекс. (См. Справочник по массиву.)
Если, скажем, вам нужна удобная функция для вставки в начале, вы можете добавить ее в класс Array
с extension.
myArray
имеет тип Array
, то первая строка неверна. Оператор +=
можно использовать, только если myArray
и правый операнд имеют тип Array
.
Используйте операторы + = и +:
extension Array {
}
func += <V> (inout left: [V], right: V) {
left.append(right)
}
func + <V>(left: Array<V>, right: V) -> Array<V>
{
var map = Array<V>()
for (v) in left {
map.append(v)
}
map.append(right)
return map
}
затем используйте:
var list = [AnyObject]()
list += "hello"
list += ["hello", "world!"]
var list2 = list + "anything"
Вот небольшое расширение, если вы хотите вставить в начале массива без потери элемента в первой позиции
extension Array{
mutating func appendAtBeginning(newItem : Element){
let copy = self
self = []
self.append(newItem)
self.appendContentsOf(copy)
}
}
Чтобы добавить к решениям, предлагающим append
, полезно знать, что во многих случаях это операция амортизируется постоянное время:
Сложность: амортизируется O (1), если само хранилище не разделяется с другим живым массивом; O (count), если self не переносит мостовой NSArray; в противном случае эффективность не определена.
Я ищу оператора cons
для Swift. Он должен возвращать новый неизменяемый массив с элементом, прикрепленным к концу, в постоянное время, без изменения исходного массива. Я еще не нашел стандартную функцию, которая делает это. Я постараюсь вспомнить, чтобы сообщить, если я найду его!
Если вы хотите добавить уникальный объект, вы можете развернуть Массив struct
extension Array where Element: Equatable {
mutating func appendUniqueObject(object: Generator.Element) {
if contains(object) == false {
append(object)
}
}
}
Вы можете использовать
Myarray.insert("Data #\(index)", atIndex: index)
Со страницы 143 языка Swift:
Вы можете добавить новый элемент в конец массива, вызвав метод добавления массивов
В качестве альтернативы добавьте новый элемент в конец массива с оператором присваивания добавления (+ =)
Отрывок из: Apple Inc. "Быстрый язык программирования". интерактивные книги. https://itun.es/us/jEUH0.l