Comment puis-je supprimer / supprimer un élément d'un tableau dans le nouveau langage d'Apple Swift?
Voici du code:
let animals = ["cats", "dogs", "chimps", "moose"]
Comment l'élément pourrait-il animals[2]
être supprimé du tableau?
Le let
mot-clé sert à déclarer des constantes qui ne peuvent pas être modifiées. Si vous souhaitez modifier une variable, vous devez utiliser à la var
place, par exemple:
var animals = ["cats", "dogs", "chimps", "moose"]
animals.remove(at: 2) //["cats", "dogs", "moose"]
Une alternative non mutante qui gardera la collection d'origine inchangée consiste à utiliser filter
pour créer une nouvelle collection sans les éléments que vous souhaitez supprimer, par exemple:
let pets = animals.filter { $0 != "chimps" }
remove
renvoie l'élément supprimé:let animal = animals.remove(at: 2)
Donné
Supprimer le premier élément
Supprimer le dernier élément
Supprimer l'élément à l'index
Supprimer l'élément d'index inconnu
Pour un seul élément
Pour plusieurs éléments
Remarques
filter
) et retournent l'élément qui a été supprimé.dropFirst
oudropLast
pour créer un nouveau tableau.Mise à jour vers Swift 5.2
la source
chimps && moose
par exemple? Je recherche quelque chose de différent de{$0 != "chimps" && $0 != "moose"}
Les réponses ci-dessus semblent supposer que vous connaissez l'index de l'élément que vous souhaitez supprimer.
Souvent, vous connaissez la référence à l'objet que vous souhaitez supprimer dans le tableau. (Vous avez parcouru votre tableau et l'avez trouvé, par exemple) Dans de tels cas, il pourrait être plus facile de travailler directement avec la référence d'objet sans avoir à passer partout son index. Par conséquent, je suggère cette solution. Il utilise l' opérateur d'identité
!==
, que vous utilisez pour tester si deux références d'objet font référence à la même instance d'objet.Bien sûr, cela ne fonctionne pas seulement pour l'
String
art.la source
list = list.filter({ $0 != element })
array.indexOf({ $0 == obj })
list
cette suppression ne mettra pas à jour les autres références de tableau puisque vous affectez un nouveau tableau àlist
. Juste une implication subtile si vous supprimez des tableaux avec cette approche.Swift 5: Voici une extension cool et facile à supprimer des éléments dans un tableau, sans filtrage:
Utilisation:
Fonctionne également avec d'autres types, car
Int
puisqueElement
est un type générique:la source
Pour Swift4:
la source
À partir de Xcode 10+, et selon la session 223 de la WWDC 2018, "Embracing Algorithms", une bonne méthode pour l'avenir sera
mutating func removeAll(where predicate: (Element) throws -> Bool) rethrows
Exemple d'Apple:
voir la documentation d'Apple
Ainsi, dans l'exemple du PO, retirer les animaux [2], "chimpanzés":
Cette méthode peut être préférée car elle évolue bien (linéaire vs quadratique), est lisible et propre. Gardez à l'esprit que cela ne fonctionne que dans Xcode 10+, et au moment de l'écriture, c'est en version bêta.
la source
Peu d'opérations concernent Array in Swift
Créer un tableau
Ajouter un objet dans un tableau
Obtenir la valeur de l'objet Index
Ajouter un objet
Insérer un objet à l'index
Supprimer un objet
Valeur de l'objet Concat
la source
Tu pourrais faire ça. Assurez-vous d'abord
Dog
qu'il existe réellement dans le tableau, puis supprimez-le. Ajoutez l'for
instruction si vous pensez que celaDog
peut se produire plusieurs fois sur votre baie.Si vous êtes sûr de
Dog
quitter le tableau et que vous ne l'avez fait qu'une seule fois, faites-le:Si vous avez les deux, des chaînes et des nombres
la source
Si vous ne connaissez pas l'index de l'élément que vous souhaitez supprimer et que l'élément est conforme au protocole Equatable, vous pouvez faire:
animals.removeAtIndex(animals.indexOf("dogs")!)
Voir la réponse du protocole Equatable: comment faire indexOfObject ou un containsObject approprié
la source
Supprimer des éléments à l'aide du tableau d'index:
Tableau de chaînes et d'index
Tableau d'entiers et d'index
Supprimer des éléments à l'aide de la valeur d'élément d'un autre tableau
Tableaux d'entiers
Tableaux de chaînes
la source
Concernant l'alternative de @ Suragch à "Supprimer l'élément d'index inconnu":
Il existe une version plus puissante de "indexOf (element)" qui correspondra à un prédicat au lieu de l'objet lui-même. Il porte le même nom mais il est appelé par myObjects.indexOf {$ 0.property = valueToMatch}. Il renvoie l'index du premier élément correspondant trouvé dans le tableau myObjects.
Si l'élément est un objet / une structure, vous souhaiterez peut-être supprimer cet élément en fonction de la valeur de l'une de ses propriétés. Par exemple, vous avez une classe Car ayant la propriété car.color et vous souhaitez supprimer la voiture "rouge" de votre tableau de voitures.
De manière prévisible, vous pouvez retravailler cela pour supprimer "toutes" les voitures rouges en incorporant l'instruction if ci-dessus dans une boucle repeat / while, et en attachant un bloc else pour définir un drapeau pour "sortir" de la boucle.
la source
Swift 5
la source
Si vous avez un tableau d'objets personnalisés, vous pouvez rechercher par propriété spécifique comme celle-ci:
ou si vous voulez rechercher par nom par exemple
la source
Cela devrait le faire (non testé):
Edit: et vous devez en faire un
var
, pas unlet
, sinon c'est une constante immuable.la source
J'ai proposé l'extension suivante qui prend en charge la suppression d'éléments d'un
Array
, en supposant que les éléments dans l'Array
implémentationEquatable
:Usage:
la source
extension pour supprimer l'objet String
la source
J'utilise cette extension, presque la même que celle de Varun, mais celle-ci (ci-dessous) est polyvalente:
la source
Pour supprimer des éléments d'un tableau, utilisez les touches
remove(at:)
,removeLast()
etremoveAll()
.Supprimer la valeur à 2 positions
Supprimer la dernière valeur du tableau
Supprime tous les membres de l'ensemble
la source