J'essaie de supprimer tous les éléments du tableau avec une boucle for comme celle-ci:
for index 1...myArray.count {
myArray.removeAtIndex(index)
}
Mais cela ne fonctionne pas, j'obtiens cette erreur avant le bulding:
Attendu ';' dans l'instruction 'for'
Réponses:
Il y a une méthode (en fait une fonction)
la source
struct
s et les structs ontfunctions
contrairement aux classes qui ontmethods
.Array
s sontstruct
s. Codeur Objective-C vétéran ici ...removeAll()
. Cependant, il est bon (discipline de la mémoire) de supprimer toutes les données inutiles lorsqu'une vue disparaît.En prenant pour acquis que la réponse de @ vadian est la solution , je voudrais juste souligner que votre code ne fonctionne pas.
Tout d'abord, les index de tableau sont basés sur 0, vous devez donc réécrire la plage en conséquence:
Cependant, cette implémentation va provoquer un crash. Si vous avez un tableau de 10 éléments, le dernier élément occupe la position à l'index 9.
En utilisant cette boucle, à la première itération, l'élément à l'index 0 est supprimé, ce qui provoque le décalage du dernier élément à l'index 8.
À l'itération suivante, l'élément à l'index 1 est supprimé et le dernier élément décale vers le bas à l'index 7. Et ainsi de suite.
À un moment donné de la boucle, une tentative de suppression d'un élément d'un index non existant provoquera le blocage de l'application.
Lors de la suppression d'éléments d'un tableau dans une boucle, la meilleure façon de le faire est de le parcourir dans l'ordre inverse:
Cela garantit que les éléments supprimés ne modifient pas l'ordre ou l'index des éléments à traiter.
la source
public extension Array where Element : Equatable { public mutating func remove(element: Element) -> Int { var occurrences = 0; for index in (0 ..< count).reverse() { if self[index] == element { removeAtIndex(index); occurrences += 1 } }; return occurrences } }
préférence pas toutes une ligne mais ce code doit être compilé sur une seule lignefor _ in 0...<myArray.count { myArray.removeAtIndex(0) }
? Je ne sais pas encore grand chose sur l'efficacité, mais de cette façon, vous n'avez pas besoin d'inverser la plage, alors peut-être que c'est plus rapide.Il vous manque le
in
mot clé à l'origine de votre erreur. Le code doit être:Cela ne fonctionnera cependant pas comme prévu pour plusieurs raisons:
count - 1
qui exigerait1..<myArray.count
Si vous essayez de supprimer toutes les choses du tableau, vous devez faire comme d'autres l'ont suggéré et utiliser:
Dans le cas où vous ne voulez que le premier élément et rien d'autre, vous pouvez obtenir une référence au premier objet, videz le tableau, puis rajoutez l'objet:
la source
count - 1
).Si vous voulez vraiment effacer le tableau, le moyen le plus simple est de le réinitialiser.
la source
Votre code devrait fonctionner, il est juste hors des limites.
Swift 3
En faisant cela, vous réaffectez un tableau vide au tableau existant et le type de données est référencé.
Vous pouvez également utiliser
removeAll
qui supprime tous les éléments du tableau et offre une option pour conserver la capacité existante.C'est une
mutating
fonction qui signifie que le tableau appelant la méthode sera changé (vide).la source
Kyle est sur la bonne voie, mais son code échouera car les indices possibles diminuent lors de l'énumération, conduisant à des indices illégaux.
Une façon de le résoudre est d'énumérer à l'envers. En rapide, cela se fait en utilisant des foulées .
une autre option serait d'utiliser
filter()
Swift 1.2
Swift 2
la source
stride
La méthode removeAllObjects () est disponible dans Swift 2
Pour supprimer un élément à un index particulier, utilisez:
Pour supprimer le dernier élément, utilisez:
Pour supprimer des éléments dans une plage particulière, utilisez:
Pour supprimer un élément particulier, utilisez:
La capture d'écran ci-dessous montre la liste des méthodes disponibles dans l'extension NSMutableArray
la source
Vous pouvez également faire ceci:
la source
Pour supprimer toutes les données d'un tableau
yourArrayData.removeAll()
la source
Vadian a la bonne réponse en termes de ce que vous essayez d'accomplir. Le problème indiqué à la suite de votre exemple de code est dû à la façon dont vous essayez de créer la
for
boucle.Index
commencera à 0 par défaut. L'ajout d'une plage de nombres après ce n'est pas la bonne façon de créer une boucle for. C'est pourquoi vous voyez l'erreur. Au lieu de cela, créez votre boucle for comme suit:Espérons que cette réponse aidera les autres nouveaux utilisateurs de Swift ou de la programmation.
la source
Pour supprimer tous les éléments du tableau
la source