web-dev-qa-db-fra.com

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 du tableau, pour obtenir:

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

Quelle méthode devrais-je utiliser?

Et que dire du cas où je veux ajouter un élément au avant du tableau? Y a-t-il un décalage constant dans le temps?

311
Fela Winkelmolen

À partir de Swift 3/4 , cette opération est effectuée 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 autre tableau dans votre tableau.

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

Pour plus d’informations, reportez-vous au chapitre "Types de collection" de " Le Swift Langage de programmation " à partir de la page 110.

559
Mick MacCallum

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 les 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à indiqué, vous ne pouvez plus utiliser '+ =' à partir de xCode 6.1

18
steveq88

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

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

Cet opérateur est généralement équivalent à la méthode append(contentsOf:) . (Et dans les très anciennes versions Swift, vous pouvez ajouter des éléments uniques, pas uniquement d'autres collections du même type d'élément.)

Il y a aussi insert(_:at:) pour l'insertion à n'importe quel index.

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

16
rickster

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
}

puis utilisez:

var list = [AnyObject]()
list += "hello" 
list += ["hello", "world!"]
var list2 = list + "anything"
10
Aqib Mumtaz

Voici une petite extension si vous souhaitez insérer au début du tableau sans perdre l'élément à la première position

extension Array{
    mutating func appendAtBeginning(newItem : Element){
        let copy = self
        self = []
        self.append(newItem)
        self.appendContentsOf(copy)
    }
}
4

Dans Swift 4.1 et Xcode 9.4.1

Nous pouvons ajouter des objets à Array essentiellement de deux manières

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)

Si vous voulez ajouter deux tableaux

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)
3
iOS

Pour ajouter au solutions suggérant append , il est utile de savoir qu’il s’agit d’une opération à temps constant amorti dans nombreux cas:

Complexité: Amortisé O(1) sauf si la mémoire de stockage de l’individu est partagée avec un autre tableau actif; O(count) si self n'emballe pas un NSArray ponté; sinon l'efficacité n'est pas spécifiée.

Je cherche un opérateur cons like pour Swift. Il devrait renvoyer un nouveau tableau immuable avec l'élément ajouté à la fin, en temps constant, sans changer le tableau d'origine. Je n'ai pas encore trouvé de fonction standard pour cela. Je vais essayer de me rappeler de signaler si j'en trouve un!

2
Benjohn

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

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

2
aglasser

Si vous souhaitez ajouter un objet unique, vous pouvez développer Array struct

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

Vous pourriez utiliser

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

Si le tableau est NSArray, vous pouvez utiliser la fonction adding pour ajouter un objet à la fin du tableau, comme ceci:

Swift 4.2

var myArray: NSArray = []
let firstElement: String = "First element"
let secondElement: String = "Second element"

// Process to add the elements to the array
myArray.adding(firstElement)
myArray.adding(secondElement)

Résultat:

print(myArray) 
// ["First element", "Second element"]

C'est un moyen très simple, salutations!

1
Radames E. Hernandez