ios - for - Agregar un elemento a una matriz en Swift
swift set (10)
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 añadir una matriz diferente al final de su matriz.
anArray += ["Moar", "Strings"]
anArray.append(contentsOf: ["Moar", "Strings"])
Para insertar un nuevo elemento en su Array.
anArray.insert("This String", at: 0)
Para insertar el contenido de una matriz diferente en su matriz.
anArray.insert(contentsOf: ["Moar", "Strings"], at: 0)
Puede encontrar más información en el capítulo "Tipos de colecciones" de " El lenguaje de programación Swift ", que comienza en la página 110.
Supongamos que tengo una matriz, por ejemplo:
var myArray = ["Steve", "Bill", "Linus", "Bret"]
Y luego quiero empujar / agregar un elemento al final de dicha matriz, para obtener:
["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 tiempo constante sin cambio?
A partir de 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 suma (+ =)
Extracto de: Apple Inc. "El lenguaje de programación Swift". IBooks. https://itun.es/us/jEUH0.l
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)
}
}
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)
//To append elements at the end
array.append(stringOne)
array.append(stringThree)
Tipo 2)
//To add elements at specific index
array.insert(strigTwo, at: 1)
Si quieres agregar dos matrices
var array1 = [1,2,3,4,5]
let array2 = [6,7,8,9]
let array3 = array1+array2
print(array3)
array1.append(contentsOf: array2)
print(array1)
Para agregar a las soluciones que sugieren el append
, es útil saber que esta es una operación de tiempo constante amortizado en muchos casos:
Complejidad: Amortizado O (1) a menos que el almacenamiento propio se comparta con otra matriz en vivo; O (contar) si el yo no envuelve una NSArray con puente; De lo contrario, la eficiencia no se especifica.
Estoy buscando un cons
como operador para Swift. Debe devolver una nueva matriz inmutable con el elemento pegado en el extremo, en tiempo constante, sin cambiar la matriz original. Todavía no he encontrado una función estándar que hace esto. ¡Trataré de recordar reportar si encuentro uno!
Para agregar al final, use el operador +=
:
myArray += ["Craig"]
myArray += ["Jony", "Eddy"]
Ese operador es equivalente al método append()
.
También hay una insert(:, atIndex:)
para insertar en cualquier índice. (Ver referencia de matriz .)
Si, por ejemplo, le gustaría una función de conveniencia para insertar al principio, podría agregarla a la clase Array
con una extension .
Si desea agregar un objeto único, puede expandir la estructura de Array
extension Array where Element: Equatable {
mutating func appendUniqueObject(object: Generator.Element) {
if contains(object) == false {
append(object)
}
}
}
También puede pasar una variable y / o un 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 añadirlos 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 ya han dicho otros, ya no puede usar ''+ ='' a partir de xCode 6.1
Usted podría usar
Myarray.insert("Data #/(index)", atIndex: index)
Utilice los operadores + = y +:
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
}
entonces use:
var list = [AnyObject]()
list += "hello"
list += ["hello", "world!"]
var list2 = list + "anything"