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

Orange73 1393 Messages postés dimanche 28 novembre 2004Date d'inscription 2 août 2011 Dernière intervention - 22 avril 2009 à 09:21 - Dernière réponse : Orange73 1393 Messages postés dimanche 28 novembre 2004Date d'inscription 2 août 2011 Dernière intervention
- 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

Répondre au sujet
Blacknight91titi 1754 Messages postés jeudi 17 juin 2004Date d'inscription 9 mars 2015 Dernière intervention - 22 avril 2009 à 10:21
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Blacknight91titi
Blacknight91titi 1754 Messages postés jeudi 17 juin 2004Date d'inscription 9 mars 2015 Dernière intervention - 22 avril 2009 à 10:37
+3
Utile
... 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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Blacknight91titi
Orange73 1393 Messages postés dimanche 28 novembre 2004Date d'inscription 2 août 2011 Dernière intervention - 22 avril 2009 à 10:32
0
Utile
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
Orange73 1393 Messages postés dimanche 28 novembre 2004Date d'inscription 2 août 2011 Dernière intervention - 22 avril 2009 à 11:05
0
Utile
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
Orange73 1393 Messages postés dimanche 28 novembre 2004Date d'inscription 2 août 2011 Dernière intervention - 22 avril 2009 à 11:10
0
Utile
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
pegase31 6161 Messages postés dimanche 21 décembre 2003Date d'inscriptionModérateurStatut 4 septembre 2013 Dernière intervention - 22 avril 2009 à 12:32
0
Utile
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
pegase31 6161 Messages postés dimanche 21 décembre 2003Date d'inscriptionModérateurStatut 4 septembre 2013 Dernière intervention - 22 avril 2009 à 12:37
0
Utile
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
gremlins7 380 Messages postés mardi 29 avril 2003Date d'inscription 28 décembre 2009 Dernière intervention - 22 avril 2009 à 13:31
0
Utile
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
pegase31 6161 Messages postés dimanche 21 décembre 2003Date d'inscriptionModérateurStatut 4 septembre 2013 Dernière intervention - 22 avril 2009 à 13:35
0
Utile
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
Blacknight91titi 1754 Messages postés jeudi 17 juin 2004Date d'inscription 9 mars 2015 Dernière intervention - 22 avril 2009 à 13:44
0
Utile
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
gremlins7 380 Messages postés mardi 29 avril 2003Date d'inscription 28 décembre 2009 Dernière intervention - 22 avril 2009 à 14:28
0
Utile
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
Orange73 1393 Messages postés dimanche 28 novembre 2004Date d'inscription 2 août 2011 Dernière intervention - 22 avril 2009 à 14:57
0
Utile
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
Orange73 1393 Messages postés dimanche 28 novembre 2004Date d'inscription 2 août 2011 Dernière intervention - 22 avril 2009 à 14:58
0
Utile
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.