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

Signaler
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011
-
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011
-
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)

13 réponses

Messages postés
1732
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
9 mars 2015
2
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
Messages postés
1732
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
9 mars 2015
2
... 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
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

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)
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

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)
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

Non j'ai rien dis :-)

-- Orange73 --
"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
8
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'
Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
8
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'
Messages postés
380
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
28 décembre 2009

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 :)
Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
8
pour ça il y a le XMLList mais il faut une base XML ... et ça se fait tout seul ;)

Peg'
Messages postés
1732
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
9 mars 2015
2
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 !)
Messages postés
380
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
28 décembre 2009

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.
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

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)
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

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)