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?
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.
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.
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
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"
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)
}
}
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!
À 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
Vous pouvez utiliser
Myarray.insert("Data #\(index)", atIndex: index)
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)
}
}
}
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)