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?
let array = [Int]()
, nunca puede decirarray[0] = 42
que dará un error de índice fuera de rango . Debe utilizararray.append(42)
. ¿Por qué no puedes subíndice? Por la misma razón no se puede hacerletters[3] = d
paralet letters = [a,b,c]
. ¡El 3er índice no existe como lo es la matriz [0] antes de un valor!Respuestas:
A partir de Swift 3/4/5 , esto se hace de la siguiente manera.
Para agregar un nuevo elemento al final de una matriz.
Para agregar una matriz diferente al final de su matriz.
Para insertar un nuevo elemento en su matriz.
Para insertar el contenido de una matriz diferente en su matriz.
Se puede encontrar más información en el capítulo "Tipos de colección" de " El lenguaje de programación Swift ", que comienza en la página 110.
fuente
splice
cambiar el nombre ainsertContentsOf
en Swift 2.También puede pasar una variable y / u objeto si lo desea.
Para agregarlos al frente:
Como ya han dicho otros, ya no puede usar '+ =' a partir de xCode 6.1
fuente
.prepend()
función, insertar en la cabeza parece ser un buen enfoquePara agregar al final, use el
+=
operador:Ese operador es generalmente equivalente al
append(contentsOf:)
método. (Y en versiones Swift realmente antiguas, podría agregar elementos individuales, no solo otras colecciones del mismo tipo de elemento).También hay
insert(_:at:)
para insertar en cualquier índice.Si, por ejemplo, desea una función conveniente para insertar al principio, puede agregarla a la
Array
clase con una extensión .fuente
myArray
es de tipoArray
, entonces la primera línea es incorrecta. El+=
operador solo se puede usar si ambosmyArray
y el operando correcto son de tipoArray
.+=
yappend
son equivalentes no es correcto, lo primero implica la creación de una matriz temporal que se descartará tan pronto como la función del operador la consuma.Utilice los operadores + = y +:
luego use:
fuente
var copy = left
y luego agregarcopy.append(right)
es suficiente. En Swift, las matrices son tipos de valor, no tipos de referencia.Aquí hay una pequeña extensión si desea insertar al comienzo de la matriz sin perder el elemento en la primera posición
fuente
En Swift 4.1 y Xcode 9.4.1
Podemos agregar objetos a Array básicamente de dos maneras
Tipo 1)
Tipo 2)
Si quieres agregar dos matrices
fuente
De la página 143 del lenguaje de programación Swift:
Extracto de: Apple Inc. "El lenguaje de programación Swift". iBooks https://itun.es/us/jEUH0.l
fuente
Para agregar a las soluciones que sugieren
append
, es útil saber que esta es una operación amortizada de tiempo constante en muchos casos:Estoy buscando un
cons
operador similar para Swift. Debería devolver una nueva matriz inmutable con el elemento agregado al final, en tiempo constante, sin cambiar la matriz original. Todavía no he encontrado una función estándar que haga esto. ¡Intentaré recordar informarme si encuentro uno!fuente
Podrías usar
fuente
Si desea agregar un objeto único, puede expandir Array struct
fuente
Si la matriz es NSArray, puede usar la
adding
función para agregar cualquier objeto al final de la matriz, de esta manera:Swift 4.2
Resultado :
Esa es una manera muy simple, saludos!
fuente
En Swift 4.2: puedes usar
o
fuente
Ejemplo: estudiantes = ["Ben", "Ivy", "Jordell"]
1) Para agregar elementos individuales al final de una matriz, use el apéndice (_ :)
students.append(\ "Maxime" )
2) Agregue varios elementos al mismo tiempo pasando otra matriz o una secuencia de cualquier tipo al método append (contentsOf :)
students.append(contentsOf: ["Shakia" , "William"])
3) Para agregar nuevos elementos en el medio de una matriz utilizando el método insert (_: at :) para elementos individuales
students.insert("Liam" , at:2 )
4) Uso de insert (contentsOf: at :) para insertar múltiples elementos de otra colección o matriz literal
students.insert(['Tim','TIM' at: 2 )
fuente