Ajouter un élément à un tableau dans Swift

Supposons que j'ai un tableau, par exemple:

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

Et plus tard, je veux pousser / ajouter un élément à la fin de ce tableau, pour obtenir:

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

Quelle méthode dois-je utiliser?

Et qu'en est-il du cas où je veux ajouter un élément au front du tableau? Y a-t-il un décalage de temps constant?

278
demandé sur Moritz 2014-06-03 00:29:51

10 réponses

Que de Swift 3 / 4, cela se fait comme suit.

Pour ajouter un nouvel élément à la fin d'un Tableau.

anArray.append("This String")

Pour ajouter un tableau différent à la fin de votre tableau.

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

Pour insérer un nouvel élément dans votre Tableau.

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

Pour insérer le contenu d'un Tableau différent dans votre Tableau.

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

Vous trouverez plus d'informations dans le chapitre "types de Collection" de " le langage de programmation Swift", à partir de la page 110.

494
répondu Mick MacCallum 2018-03-12 15:53:45

Pour ajouter à la fin, utilisez l'opérateur +=:

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

Cet opérateur est équivalent à la méthode append().

Il y a aussi insert(:, atIndex:) pour insérer à n'importe quel indice. (Voir Référence Du Tableau .)

Si, par exemple, vous souhaitez une fonction de commodité pour l'insertion, au début, vous pouvez l'ajouter à la Array classe avec un extension.

15
répondu rickster 2015-01-26 15:32:14

Vous pouvez également transmettre une variable et / ou un objet si vous le souhaitez.

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)

Pour ajouter à l'avant:

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

Comme d'autres l'ont déjà dit, vous ne pouvez plus utiliser '+ = ' à partir de xCode 6.1

14
répondu steveq88 2016-07-25 18:45:44

Utilisez les opérateurs += et+:

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
}

Ensuite, utilisez:

var list = [AnyObject]()
list += "hello" 
list += ["hello", "world!"]
var list2 = list + "anything"
10
répondu Aqib Mumtaz 2016-09-29 07:13:57

Voici une petite extension si vous souhaitez insérer, au début du tableau sans perdre le point à la première position

extension Array{
    mutating func appendAtBeginning(newItem : Element){
        let copy = self
        self = []
        self.append(newItem)
        self.appendContentsOf(copy)
    }
}
4
répondu Sebastian Ustinelli 2016-05-22 00:05:14

Pour ajouter aux solutions suggérant append, il est utile de savoir qu'il s'agit d'une opération amortie en temps constant dans de nombreux cas:

Complexité: amorti O (1) sauf si le stockage de self est partagé avec un autre tableau live; O (count) si self n'enveloppe pas un NSArray ponté; sinon l'efficacité n'est pas spécifiée.

Je suis à la recherche d'un opérateur cons comme pour Swift. Il devrait renvoyer unNew tableau immuable avec l'élément cloué sur le fin, en temps constant, sans changer le tableau d'origine. Je n'ai pas encore trouvé une fonction standard qui le fait. Je vais essayer de me rappeler de rapport si j'en trouve un!

2
répondu Benjohn 2017-05-23 12:34:38

À partir de la page 143 du langage de programmation Swift:

Vous pouvez ajouter un nouvel élément à la fin d'un tableau en appelant la méthode append du tableau

Vous pouvez également ajouter un nouvel élément à la fin d'un tableau avec l'opérateur d'affectation d'addition (+=)

Extrait De: Apple Inc. "Le Langage De Programmation Swift."iBooks. https://itun.es/us/jEUH0.l

1
répondu aglasser 2014-06-02 20:33:31

Vous pouvez utiliser

Myarray.insert("Data #\(index)", atIndex: index)
1
répondu ANIL.MUNDURU 2015-03-01 18:37:18

Si vous voulez ajouter d'objet unique, vous pouvez étendre Matrice struct

extension Array where Element: Equatable {
    mutating func appendUniqueObject(object: Generator.Element) {
        if contains(object) == false {
            append(object)
        }
    }
}
1
répondu Tikhonov Alexander 2016-01-06 15:08:17

Dans Swift 4.1 et Xcode 9.4.1

Nous pouvons ajouter des objets au tableau essentiellement de deux façons

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

Type 1)

//To append elements at the end
array.append(stringOne)
array.append(stringThree)

Type 2)

//To add elements at specific index
array.insert(strigTwo, at: 1)
1
répondu iOS 2018-09-08 04:46:44