Supprimer élément dans array [Résolu]

Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011
- - Dernière réponse : Orange73
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011
- 22 avril 2009 à 14:58
Hello,

En AS3, j'ai un array de ce genre :

var myArray:Array = new Array("pomme","poire","banane","fraise");

Je souhaiterais , par exemple, supprimer l'élément "poire"...

Je sais que je pourrais faire myArray.splice(1,1);

mais n'y a-t'il pas un autre moyen plus rapide genre un myArray.splice("poire");

Merci

-- Orange73 --
"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Afficher la suite 

13 réponses

Meilleure réponse
Messages postés
1754
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
9 mars 2015
1
3
Merci
Bonjour,

Cette méthode n'est pas directement implémenter sur la classe Array. Cependant tu peux toujours effectuer une recherche sur ton tableau afin de récupérer les index qui t'intérèsse :

var myArray:Array = ["pomme","poire","fraise"];
var index:uint = myArray.indexOf("poire");
myArray.splice(index,1);

Le problème surviendra lorsque tu as plusieurs éléments identique dans ton tableau.
Pour corriger le problème, il suffit de faire une boucle while du style :
while (myArray.indexOf("poire") != -1)
   //Ici ton code

Conseil : Si tu n'utilises qu'un seul type de donnée, utiles plutôt la classe Vector, tu gagneras en performance

Blacknight

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 125 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Blacknight91titi
Messages postés
1754
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
9 mars 2015
1
3
Merci
... Je suis bien gentil aujourd'hui :

var find:String = "poire";

var index:uint = 0;
while ((index = myArray.indexOf(find, index)) != -1)
myArray.splice(index,1);

Je fournis le deuxième paramètre dans le indexOf pour une question de sécurité.
Dans le cas ou tu ne fais pas de splice notamment (autrement cela te donne une belle boucle sans fin).

Note : code généré sans test préalable. Il est possible qu'il y ait une erreur.
Je t'ai cependant déjà bien aidé, à toi de corriger si nécessaire;)

Blacknight
www.osteres.com

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 125 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Blacknight91titi
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011
0
Merci
Ok cool merci [../auteur/BLACKNIGHT91TITI/294509.aspx Blacknight91titi]

Question :
Comment faire pour récupérer l'index de chaque items identiques dans l'array ?
Avec le boucle while oui, mais comment ?

Merci

-- Orange73 --
"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Commenter la réponse de Orange73
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011
0
Merci
Super cool.

Merci

Pourquoi tu dis "Je fournis le deuxième paramètre dans le indexOf pour une question de sécurité.
" ? du fait que flash génère une erreur de sécurité genre script trop long a l'exécution ?

-- Orange73 --
"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Commenter la réponse de Orange73
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011
0
Merci
Non j'ai rien dis :-)

-- Orange73 --
"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Commenter la réponse de Orange73
Messages postés
6161
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
6
0
Merci
En AS3, il existe deux fonction d'Array qui s'appellent "some" et every et qui tourne sur chaque élément du tableau en exécutant une fonciton callBack permettant une comparaison (ou autre) avec l'élément du tableau.

Certes, celà ne s'inscrit pas dans le cadre de ta question, mais ces deux fonction sont bien plus performantes qu'un simple "while" ou un "for".

Dans ton cas, un "for each in" serait aussi fonctionnel, et bien plus sympa qu'un while.

N'oublies pas d'utiliser les Vector si tu es en cs4 et que c'est possible, car encore une fois les performances sont bien meilleures.

Peg'
Commenter la réponse de pegase31
Messages postés
6161
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
6
0
Merci
ajout du gars un peu plus réveillé :

Dans le code de Blacknight, il est inutile de stocker la valeur de l'indexe, puisque la case est détruite, donc plus besoin du pointeur:

var find:String = "poire";

while (myArray.indexOf(find) != -1)

   myArray.splice(index,1);
}

Et ça marche aussi avec lastIndexOf();

Peg'
Commenter la réponse de pegase31
Messages postés
380
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
28 décembre 2009
0
Merci
Salut,
en fait ce que tu veux faire (si je capte bien) c'est une liste. Une liste peut contenir plusieur items identiques et c'est ce qui fait toute sa puissance. Pour être plus technique ça peut s'apparenter à une CAM (par opposition à RAM) pour Content-Addressable Memory. Ca sert surtout pour les bases de données.
Voici plus d'info sur le sujet : http://fr.wikipedia.org/wiki/M%C3%A9moire_adressable_par_contenu

PS : si tu fait une classe liste ou CAM, je suis preneur :)
Commenter la réponse de gremlins7
Messages postés
6161
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
6
0
Merci
pour ça il y a le XMLList mais il faut une base XML ... et ça se fait tout seul ;)

Peg'
Commenter la réponse de pegase31
Messages postés
1754
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
9 mars 2015
1
0
Merci
Au final autant utiliser le XML autant que possible étant donné sa puissance !

Attention cependant, ce ne sera pas adapté pour du contenu autre que des chaînes de caractère.

Je confirme pour l'exemple de Peg', mieux vaut utiliser cette méthode moins coûteuse en occupation mémoire (infime certes mais c'est bien comme cela qu'il faut travailler !)
Commenter la réponse de Blacknight91titi
Messages postés
380
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
28 décembre 2009
0
Merci
C'est sur vaut mieux utiliser le XML pour ce qu'il a faire...

PS: cela dit s'il fait une classe liste avec des array, je suis quand même preneur.
Commenter la réponse de gremlins7
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011
0
Merci
Merci à tous.

Bien sûr que j'utilise XML.
Je code dans ma demande etati simplement simplifiée pour compréhension.

En fait, je recupere mes datas XML puis push certains datas dans un array. C'est pour cela 

-- Orange73 --
"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Commenter la réponse de Orange73
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011
0
Merci
Correction :

Le code dans ma demande est simplement simplifiée pour une meilleure compréhension.

-- Orange73 --
"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Commenter la réponse de Orange73