Partage
  • Partager sur Facebook
  • Partager sur Twitter

[AS]Comment classer des nombres puis garder les 5 premiers

ex {23;54;12;8;100;84;1;37} ==> {1;8;12;23;37}

Sujet résolu
    27 juin 2007 à 0:42:38

    Bon daxou :

    tes entrées de tableau sont de type string, c'est à dire que chaque case du tableau contient des variables de type string... c'est à dire qu'il les compare alphabétiquement.

    ceci est surement à cause de 2 erreurs types :

    soit tu déclares mal tes variables, et encore, flash est assez intelligent, généralement si il n'y a que des chiffres, il les converti en number immédiatement.

    soit tu obtiens tes variables par php, et là elles sont toujours de type string.

    La solution est simple dans les 2 cas : convertis les en var maVar:Number.

    comme ça tu verras facilement que la fonction sort gère le tri sans aucun argument supplémentaire.

    NB : je suppose que tu obtiens tes variables par php, puisque c'est une database de score. la méthode la plus simple dans ce cas :

    -prendre tes variables dans la bdd avec php
    -les trier avec php
    -puis les envoyer à flash. ça t'évite la phase de conversion et donc tu gagnes du temps. après si tu as besoin de manipuler tes variables sous flash (genre addition)... il faudra alors les convertir dans flash.

    je pense que là ton problème va être solvé.
    • Partager sur Facebook
    • Partager sur Twitter
      27 juin 2007 à 1:07:06

      ok mais en action script ca donne quoi ?

      J'ai essayé plein d'esquisses mais impossible !!

      Nada :'(:'(

      Je continurais a chercher sinon, comme alternative, et comme c'est plus facile avec mySQl (enfin je crois :p), je vais essayer d'envoyer mas données via php sur une bdd et plus sur un XML car la c'est ... prise de tete.

      Edit : on a posté en meme temps (et oui j'ai mis du temps a ecrire mon post :p) et on a eu la meme idee donc je vais chercher comment passer de flash a mySQL sans que l'utilisateur puisse influer sur le resultat avec un code dans barre d'adresse ex : ?pseudo=Martin&score=203224 donc voilou
      • Partager sur Facebook
      • Partager sur Twitter
        27 juin 2007 à 2:57:03

        Bon allez, dernier effort là... daxou c'est le B-A-BA la gestion des variables. si tu as déjà des soucis pour gérer des varS... tu risque de galérer avec une appli serveur.

        exemple de conversion de données avec un xml.


        je suppose ici que tu as déjà chargé le XML donc je zappe la partie de loading. le xml en question est chargé dans monXML, ouvre grand les yeux parce que la c'est maché :

        conversion en numérique de données xml :
        var monScore0:Number = Number(monXML.firstChild.childNode[0].nodeValue)
        var monScore1:Number = Number(monXML.firstChild.childNode[1].nodeValue)


        conversion en numérique de données xml avec une boucle :
        for (var i:Number =0; i < monXML.firstChild.childNode.length ; i++){

        this["monScore"+i] = Number(monXML.firstChild.childNode[i].nodeValue)

        }


        Comme tu as vu je "caste" les données en number, c'est à dire que je fais un forcing pour une assignation de ces valeurs en number.
        La méthode est simple : maVariable = Number (monContenu). Une fois ceci fait, je peux manipuler mathématiquement celle ci.
        (1 + 1 fera bien 2 et non pas 11).



        Code final : conversion des données en numérique d'un xml et ajout dans un tableau
        //Déclaration du tableau, ici tableau vide.
        var monTableau:Array = new Array()

        //Création de la boucle de conversion & d'ajout
        for (var i:Number =0; i < monXML.firstChild.childNode.length ; i++){

        //Ajout dans le tableau
        monTableau[i] = Number(monXML.firstChild.childNode[i].nodeValue)

        }

        //fin de la boucle, Afficher le Top 5
        monTableau.sort(Array.NUMERIC)

        //Vérification du tri par affichage du tableau
        trace(monTableau)


        Je caste a nouveau les données en Number(maDonnée).
        J'ajoute cette donnée à monTableau (tu peux également le faire avec la méthode .push mais si ton tableau est vide... pas besoin de ça.


        Je fais un .sort pour trier le tableau.
        Su ce .sort j'y ajoute l'option Array.NUMERIC (pour que 3 soit avant 22 et pas l'inverse)


        PS : J'ai fais les recherches nécessaire sur google et les sources dispo sur le net (en tuto ou en doc) j'y ai tout trouvé tout seul comme un grand. Car, malgré mon expérience sur flash, ma mémoire ne peut retenir toutes les fonctions et les syntaxes d'un code aussi complet. Néanmoins si je l'ai fait, tu aurais pu le faire. Certes avec un peu plus de temps que moi, mais ceci est pour ton projet et également ton apprentissage.

        NB : Pour ton confort j'ai vérifié que ce code soit bien opérationnel sous flash. Ma version : Flash 8 Pro.

        Enfin, je te souhaite bon courage pour la suite de ton projet, le xml c'est vraiment une bonne soluce pour parler à flash, il le gère comme un grand, tu devrais rester là dessus. Je suis toujours prêt à répondre à des questions, mais je pense que pour l'apprentissage, rien ne vaut la recherche par soi même sur le net qui est une source géniale. En admettant que certains pb délicats ont besoin d'être soulevé sur des forum tel que celui-ci.

        En te souhaitant bien du plaisir sur flash et l'as (que je trouve formidable depuis que je suis dessus (version 4... alors c'est une histoire d'amour entre moi et le swf))

        @ bientot.
        • Partager sur Facebook
        • Partager sur Twitter
          27 juin 2007 à 12:05:16

          Ok avec ca :


          score[i] = Number(joueur[i].childNodes[1].firstChild.nodeValue);
          score.sort(Array.DESCENDING | Array.NUMERIC)


          J'arrive a les avoir classé dans le bon ordre comme ca avec score[0] j'ai la plus grande ...

          Maintenant il me faudrait recuperer le nom qui va avec le score mais le probleme c'est qu'avec le "pseudo[i] = String(joueur[i].childNodes[0].firstChild.nodeValue);" je l'ai dans l'odre du XML ! :-°


          Je pense qu'avec previousSibling ca doit pouvoir le faire

          Donc je cherche encore un peu et apres j'arrete de vous embeter avec ca !!

          edit :
          Un truc comme ca mais ca ne marche pas, ca me renvoie encore les nom dans l'ordre du xml :
          tousscore[i] = (joueur[i].childNodes[1]);
          score[i] = Number(tousscore[i].firstChild.nodeValue);
          score.sort(Array.DESCENDING | Array.NUMERIC);
          pseudo[i] = tousscore[i].previousSibling.firstChild.nodeValue;


          Donc je pense que le tri se fera en amont avec du php dans une base.
          Je vous remerci car il y a des chose que je vais reutiliser!


          Merci
          • Partager sur Facebook
          • Partager sur Twitter

          [AS]Comment classer des nombres puis garder les 5 premiers

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown