Suponha que eu tenha uma matriz, por exemplo:
var myArray = ["Steve", "Bill", "Linus", "Bret"]
E depois eu quero empurrar / acrescentar um elemento ao final do referido array, para obter:
["Steve", "Bill", "Linus", "Bret", "Tim"]
Que método devo usar?
E o caso em que eu quero adicionar um elemento à frente da matriz? Existe um tempo constante sem mudança?
let array = [Int]()
nunca poderá dizer quearray[0] = 42
isso dará um erro de índice fora da faixa . Você deveria usararray.append(42)
. Por que você não pode se inscrever? Pela mesma razão, você não pode fazerletters[3] = d
paralet letters = [a,b,c]
. O terceiro índice é inexistente, assim como a matriz [0] antes de um valor!Respostas:
A partir do Swift 3/4/5 , isso é feito da seguinte maneira.
Para adicionar um novo elemento ao final de uma matriz.
Para acrescentar uma matriz diferente ao final da matriz.
Para inserir um novo elemento em sua matriz.
Para inserir o conteúdo de uma matriz diferente em sua matriz.
Mais informações podem ser encontradas no capítulo "Tipos de coleções" de " A linguagem de programação Swift ", começando na página 110.
fonte
splice
renomear ainsertContentsOf
em Swift 2.Você também pode passar uma variável e / ou objeto, se quiser.
Para adicioná-los à frente:
Como outros já declararam, você não pode mais usar '+ =' a partir do xCode 6.1
fonte
.prepend()
função, inserindo na cabeça parece ser uma abordagem bemPara adicionar ao final, use o
+=
operador:Esse operador geralmente é equivalente ao
append(contentsOf:)
método. (E nas versões Swift realmente antigas, era possível acrescentar elementos únicos, não apenas outras coleções do mesmo tipo.)Também há
insert(_:at:)
para inserir em qualquer índice.Se, por exemplo, você quiser uma função de conveniência para inserir no início, adicione-a à
Array
classe com uma extensão .fonte
myArray
for do tipoArray
, a primeira linha está incorreta. O+=
operador só pode ser usado se ambosmyArray
e o operando correto forem do tipoArray
.+=
eappend
equivalentes não está correto, o primeiro envolve a criação de uma matriz temporária que será descartada assim que a função do operador o consumir.Use os operadores + = e +:
então use:
fonte
var copy = left
e depois anexarcopy.append(right)
é suficiente. No Swift, matrizes são tipos de valor, não tipos de referência.Aqui está uma pequena extensão se você deseja inserir no início da matriz sem perder o item na primeira posição
fonte
No Swift 4.1 e no Xcode 9.4.1
Podemos adicionar objetos ao Array basicamente de duas maneiras
Tipo 1)
Tipo 2)
Se você deseja adicionar duas matrizes
fonte
Na página 143 da linguagem de programação Swift:
Trecho de: Apple Inc. “A linguagem de programação Swift”. iBooks. https://itun.es/us/jEUH0.l
fonte
Para adicionar às soluções sugeridas
append
, é útil saber que essa é uma operação de tempo constante amortizada em muitos casos:Estou procurando um
cons
operador semelhante para Swift. Ele deve retornar uma nova matriz imutável com o elemento pregado no final, em tempo constante, sem alterar a matriz original. Ainda não encontrei uma função padrão que faça isso. Vou tentar lembrar de informar se encontrar um!fonte
Você poderia usar
fonte
Se você deseja acrescentar um objeto exclusivo, pode expandir a estrutura da matriz
fonte
Se a matriz for NSArray, você poderá usar a
adding
função para adicionar qualquer objeto no final da matriz, assim:Swift 4.2
Resultado :
Essa é uma maneira muito simples, cumprimentos!
fonte
No Swift 4.2: você pode usar
ou
fonte
Exemplo: alunos = ["Ben", "Ivy", "Jordell"]
1) Para adicionar elementos únicos ao final de uma matriz, use o apêndice (_ :)
students.append(\ "Maxime" )
2) Adicione vários elementos ao mesmo tempo passando outra matriz ou sequência de qualquer tipo para o método append (contentsOf :)
students.append(contentsOf: ["Shakia" , "William"])
3) Para adicionar novos elementos no meio de uma matriz usando o método insert (_: at :) para elementos únicos
students.insert("Liam" , at:2 )
4) Usando insert (contentsOf: at :) para inserir vários elementos de outra coleção ou matriz literal
students.insert(['Tim','TIM' at: 2 )
fonte