Agregue un elemento a una matriz en Swift

Supongamos que tengo una matriz, por ejemplo:

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

Y luego quiero insertar / agregar un elemento al final de dicha matriz, para obtener:

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

¿Qué método debo usar?

¿Y el caso donde quiero agregar un elemento al frente de la matriz? ¿Hay un cambio de tiempo constante?

A partir de Swift 3/4 , esto se hace 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 su matriz.

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

Para insertar un nuevo elemento en su matriz.

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

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

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

Se puede encontrar más información en el capítulo “Tipos de recostackción” de ” El lenguaje de progtwigción Swift “, que comienza en la página 110.

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 insertar en cualquier índice. (Ver referencia de matriz )

Si, por ejemplo, desea una función de conveniencia para insertar al principio, puede agregarla a la clase Array con una extensión .

También puede pasar una variable y / u objeto si 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 han indicado, ya no puede usar ‘+ =’ a partir de xCode 6.1

Use los operadores + = y +:

 extension Array { } func +=  (inout left: [V], right: V) { left.append(right) } func + (left: Array, right: V) -> Array { var map = Array() 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 insertar al principio de la matriz sin perder el elemento en la primera posición

 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 se trata de una operación de tiempo constante amortizado en muchos casos:

Complejidad: Amortized O (1) a menos que el almacenamiento propio se comparta con otra matriz en vivo; O (conteo) si el yo no envuelve un NSArray puenteado; de lo contrario, la eficiencia no está especificada.

Estoy buscando un operador como cons para Swift. Debería devolver una nueva matriz inmutable con el elemento marcado al final, en tiempo constante, sin cambiar la matriz original. Todavía no he encontrado una función estándar que haga esto. ¡Trataré de recordar informar si encuentro uno!

Desde la página 143 de The Swift Programming Language:

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

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

Extracto de: Apple Inc. “The Swift Programming Language”. IBooks. https://itun.es/us/jEUH0.l

Podrías usar

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

Si desea agregar un objeto único, puede expandir Array struct

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

En Swift 4.1 y Xcode 9.4.1

Podemos agregar objetos a Array básicamente de dos maneras

 let stringOne = "One" let strigTwo = "Two" let stringThree = "Three" var array:[String] = []//If your array is string type 

Tipo 1)

 array.append(stringOne) array.append(stringThree) 

Tipo 2)

 array.insert(strigTwo, at: 1)