Supprimer élément dans array

Résolu
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011 - 22 avril 2009 à 09:21
Orange73 Messages postés 1375 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)
A voir également:

13 réponses

Blacknight91titi Messages postés 1732 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 9 mars 2015 2
22 avril 2009 à 10:21
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
3
Blacknight91titi Messages postés 1732 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 9 mars 2015 2
22 avril 2009 à 10:37
... 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
3
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
22 avril 2009 à 10:32
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)
0
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
22 avril 2009 à 11:05
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)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
22 avril 2009 à 11:10
Non j'ai rien dis :-)

-- Orange73 --
"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
22 avril 2009 à 12:32
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'
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
22 avril 2009 à 12:37
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'
0
gremlins7 Messages postés 380 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 28 décembre 2009
22 avril 2009 à 13:31
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 :)
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
22 avril 2009 à 13:35
pour ça il y a le XMLList mais il faut une base XML ... et ça se fait tout seul ;)

Peg'
0
Blacknight91titi Messages postés 1732 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 9 mars 2015 2
22 avril 2009 à 13:44
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 !)
0
gremlins7 Messages postés 380 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 28 décembre 2009
22 avril 2009 à 14:28
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.
0
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
22 avril 2009 à 14:57
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)
0
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
22 avril 2009 à 14:58
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)
0
Rejoignez-nous