Agregue un elemento a una matriz en Swift

Supongamos que tengo una matriz, por ejemplo:

var myArray = ["Steve", "Bill", "Linus", "Bret"] 

Y luego quiero empujar / anexar un elemento al final de dicho array, para get:

["Steve", "Bill", "Linus", "Bret", "Tim"]

¿Qué método debo usar?

¿Y qué pasa con el caso en el que quiero agregar un elemento al frente de la matriz? ¿Hay un time constante sin cambios?

Tenías un par de opciones para agregar un elemento a una matriz. En las primeras betas, puedes usar el operador + = para agregar un elemento individual, pero este ya no es el caso. Sin embargo, puedes usar la function de agregar.

 anArray.append("This String") 

Si está buscando agregar más elementos de una matriz diferente a su matriz, aún puede utilizar el operador + =, o el método extend.

 anArray += ["Moar", "Strings"] anArray.extend(["Moar", "Strings"]) 

Para insert un solo object al comienzo de la matriz, puede usar el método insert.

 anArray.insert("This String", atIndex: 0) 

Para insert los contenidos de una matriz diferente al comienzo de una matriz, puede usar el método de empalme.

 anArray.insertContentsOf(["So", "Many", "Strings"], at: 0) 

En el caso de insert e insertContentsOf, el argumento de segundos puede ser cualquier índice válido de la matriz receptora.

Puede encontrar más información en el capítulo "Tipos de collections" de " El lenguaje de progtwigción Swift ", que comienza en la página 110.


A partir de Swift 3 , los ejemplos anteriores deben escribirse de la siguiente manera.

Para agregar un nuevo elemento al final de una matriz.

 anArray.append("This String") 

Para agregar una matriz diferente al final de tu matriz.

 anArray += ["Moar", "Strings"] anArray.append(contentsOf: ["Moar", "Strings"]) 

Para insert un nuevo elemento en su matriz.

 anArray.insert("This String", at: 0) 

Para insert los contenidos de una matriz diferente en su matriz.

 anArray.insert(contentsOf: ["Moar", "Strings"], at: 0) 

Para agregar al final, use el operador += :

 myArray += ["Craig"] myArray += ["Jony", "Eddy"] 

Ese operador es equivalente al método append() .

También hay insert(:, atIndex:) para insert en cualquier índice. (Consulte Referencia de la matriz .)

Si, por ejemplo, desea una function de conveniencia para insert al principio, puede agregarla a la class Array con una extensión .

También puede pasar una variable u object si así lo desea.

 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) 

Para agregarlos al frente:

 //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) 

Como otros ya lo han dicho, ya no puede usar '+ =' a partir de xCode 6.1

Use + = y + operadores:

 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 } 

luego usa:

 var list = [AnyObject]() list += "hello" list += ["hello", "world!"] var list2 = list + "anything" 

Aquí hay una pequeña extensión si desea insert al comienzo de la matriz sin perder el elemento en la primera position

 extension Array{ mutating func appendAtBeginning(newItem : Element){ let copy = self self = [] self.append(newItem) self.appendContentsOf(copy) } } 

Para agregar a las soluciones que sugieren append , es útil saber que esta es una operación de time constante amortizada en muchos casos:

Complejidad: Amortized O (1) a less que el almacenamiento de self se comparta con otro array en vivo; O (contar) si uno mismo no envuelve un NSArray puenteado; de lo contrario, la eficiencia no está especificada.

Estoy buscando un cons como operador para Swift. Debería devolver una nueva matriz inmutable con el elemento enlazado al final, en time constante, sin cambiar la matriz original. Aún no he encontrado una function estándar que lo haga. Trataré de recordar informar si encuentro uno.

A partir de la página 143 del lenguaje de progtwigción Swift:

Puede agregar un nuevo elemento al final de una matriz llamando al método de anexión de la matriz

Alternativamente, agregue un elemento nuevo al final de una matriz con el operador de asignación de sum (+ =)

Extracto de: Apple Inc. "El lenguaje de progtwigción Swift". IBooks. https://itun.es/us/jEUH0.l

Podrías usar

 Myarray.insert("Data #\(index)", atIndex: index) 

Si desea agregar un object único, puede ampliar la estructura de Array.

 extension Array where Element: Equatable { mutating func appendUniqueObject(object: Generator.Element) { if contains(object) == false { append(object) } } }