Je suis confronté a un petit probleme en AS, j'aurais besoin de quelque chose qui dans un array de la forme (joueur[i].lastChild.firstChild) classe tous les nombres dans l'ordre croissant puis je voudrais garder que les 5 premiers.
Heu, c'est quoi exactement ton problème?
Pourquoi ne pas tout simplement classer la liste par taille puis prendre les éléments d'indice 0, 1, 2, 3, et 4?
Si c'est ce que je voudrais en fait il me faudrait garder les plus 5 plus grand donc j'aimerais savoir comment tu fais ?
Si AS possède déjà une fonction style sort, t'as rien à faire.
Sinon, t'implémente un truc, genre quicksort.
Si y'a des mots qui t'échappent dans ce post, en.wikipedia.org
Je vien de regarder mais les exemples qu'ils donnent la sortOn() ne fonctionnent pas pour classer dans un ordre ou dans l'autre.
Je cherche encore mais je vais encore tester quelques truc la dessus.
Merci
PS : Quand j'ai la liste dans l'ordre c'est bon je pense qu'avec liste[0], liste[1] ou liste[joueur.length-1], liste[joueur.length-2]..., j'ai les premiers ou les derniers
méthode :
-mettre dans un tableau(1) les score
-faire un tri du tableau(1)
-mettre les résultats du tri du tableau(1) dans un autre tableau(2)
-afficher le tableau des résultats tu tri(2).
Google + flash + actionscript + array + méthode + classe = bingo !
-mettre dans un tableau(1) les score
-faire un tri du tableau(1)
-mettre les résultats du tri du tableau(1) dans un autre tableau(2)
-afficher le tableau des résultats tu tri(2)
Le probleme la dedans c'est que moi je voudrais :
-mettre dans un tableau(1) les score
-faire un tri (avec quoi ??) du tableau(1)
-mettre les résultats du tri du tableau(1) dans un autre tableau(2)
-afficher le tableau des résultats tu tri(2)
tes entrées sont de type string au lieu d'être de type number... il les compare alphabétiquement.
NB : pour le multi-post, je parlais pas du site du zéro uniquement. tu as posté au sujet du xml sur le SdZ et Mediabox... je suis sur les deux, mais lorsque je pose une question c'est sur un des deux, en fonction de ma demande.
Y'a pas des algorithmes de tri?
Le truc par dichotomie par exemple.
Dans l'idée tu compares les cases des tableaux deux à deux et en fonction du résultat tu déplaces les cases ou pas
En gros
case 1 = 15
case 2 = 3
Comparaison par exemple (case 1 < case 2) on obtient = true
Alors case 1 prend la valeur case 2 et case 2 prend la valeur case 1
et ainsi de suite...
Inconvénients : le nombre de passage sur le tableau n'est pas optimal, puisqu'il y a au moins une fois ou on parcours le tableau pour rien (à la fin)
J'ai regardé sur gotAPI j'ai rien trouvé en ce qui concerne la fonction toint()
En meme temps je ne suis pas spécialisé en Action Script
Si y'a pas d'accents dans mes messages c'est parce que je suis sur un clavier norvegien :)
Si tu veux uniquement les 5 plus grands scores, c'est peut-être un peu bourrin de trier le tableau (avec une complexité qui va croître comme n×ln n)...
Dans la mesure où je ne connais pas du tout ce langage, voici la façon dont je m'y prendrais, en pseudo-code. Je suppose que tu disposes d'une structure de liste ; on accède au premier élément par tête(liste) et à la fin de la liste par queue(liste) ; on ajoute un élément au début de la liste par concat(élément, liste).
fonction insère (élément, liste)
/* liste est une liste triée, avec le plus grand élément à la fin ; le résultat renvoyé est une liste, triée, avec élément inséré à sa place */
fin <- liste
début <- Nil /* la liste vide */
Tant que fin <> Nil et tête(fin) < élément Faire
fin <- queue(fin)
début <- concat(tête(fin), début)
Fin Tant que
fin <- concat(élément, fin)
Tant que début <> Nil Faire
fin <- concat(tête(début), fin)
début <- queue(début)
Fin Tant que
RENVOYER(fin)
/* Version récursive, bien plus simple, mais qui fait peur aux gens paraît-il */
fonction insère (élément, liste)
Si liste = Nil
Alors RENVOYER(concat(élément, Nil))
Sinon
a <- tête(liste)
s <- queue(liste)
Si a < élément Alors RENVOYER(concat(a, insère(élément, s)))
Sinon RENVOYER(concat(élément, liste))
Puis la fonction de sélection des cinq plus grands éléments. Je suppose les tableaux indicés de 1 à Taille(tableau).
fonction sélectionne(tableau)
résultat <- Nil
Pour i = 1 à min(5, Taille(tableau)) Faire
résultat <- insère(tableau.(i), résultat)
Fin Pour
Pour i = 6 à Taille(tableau) Faire
résultat <- insère(tableau.(i), résultat)
résultat <- queue(résultat)
Fin Pour
RENVOYER(résultat)
En voilà, avec une complexité de O(Taille(tableau)). (Si tu veux récupérer les k premiers éléments, tu auras une complexité de O(k×Taille(tableau)).)
Sinon, comme dis plus haut, ça ne règle pas le problème des entiers représentés par des chaînes de caractères (???).
Sauf qu'en vrai, on se fait beaucoup moins chier à trier et prendre les 5 premiers, et en plus dans un langage de script douteux comme ici, ta fonction insertion sera sans doute ultra lente par rapport à la fonction sort, qui est probablement une routine C (ou tout autre langage un peu sérieux).
Par ailleurs, il est laid ton pseudo code. Tu fais du Pascal ?
Pour un tableau suffisamment grand, le tri sera forcément plus lent (asymptotiquement, en O(n ln n)) que ce que j'ai fait (en O(n)). Après, si la fonction de tri intégrée est effectivement optimisée au point que la différence n'est visible que pour des tableaux de plus 10 000 cases, je reconnais que l'intérêt est plutôt limité.
J'avoue avoir une formation théorique, et que voir une technique en O(n ln n) au lieu de O(n) me fait hérisser le poil.
Et qu'est-ce qu'il a, mon pseudo-code ? C'est celui auquel je suis habitué (bon, d'accord, il y a l'indentation qui a sauté, mais à part ça, je ne vois pas).
Je ne fais pas de Pascal, mais du Caml.
Bah euh, la complexité asymptotique c'est bien gentil, mais si ça veut dire ajouter 20 lignes dans un programme pour un truc qui se fait en 3, avec les bugs potentiels que ça comporte, tout ça pour trouver les 5 plus grands éléments d'un tableau de taille 200 ou 300...
Sachant que comme je l'ai dit ta fonction sera toujours plus lente que la routine Sort si elle est correctement codée (c'est à dire pas dans le langage de script lui-même), ton changement est pas intéressant en pratique (bien que satisfaisant sur le plan théorique).
Ton pseudocode semble hériter d'un langage impératif : il n'y a pas de distinction entre la déclaration et l'affectation/modification des valeurs, tu utilises une instruction RENVOYER, etc...
Je vous remercie mais je vais d'aborsd essayer avec le sort() !!
Je ne crois pas avoir tout compris de l'autre methode en plus.
Edit : moi non plus j'ai pas trouvé le toInt, meme si le toString existe, De plus le NUMERIC rajouté dans la fonction devrait donner le resultat en numerique ce qui n'est pas le cas. J'ai trouvé ca mais je ne vois pas comment ca marche : "NUMERIC (Array.NUMERIC property)".
Sachant que comme je l'ai dit ta fonction sera toujours plus lente que la routine Sort si elle est correctement codée (c'est à dire pas dans le langage de script lui-même), ton changement est pas intéressant en pratique (bien que satisfaisant sur le plan théorique).
Oui, c'est vrai, j'ai peut-être tendance à être assez théorique. J'admets que trier le tableau puis extraire les plus grands éléments est plus efficace en pratique.
Citation : bluestorm
Ton pseudocode semble hériter d'un langage impératif : il n'y a pas de distinction entre la déclaration et l'affectation/modification des valeurs, tu utilises une instruction RENVOYER, etc...
J'utilise le pseudo-code qu'on m'a appris à utiliser. J'aurais pu le coder en Caml ou un pseudo-code fonctionnel (surtout la fonction d'insertion, qui aurait été plus naturelle à écrire), mais pour quelqu'un ne connaissant pas Caml, cela aurait été plus difficile à comprendre. C'est le pseudo-code qu'on utilise en maths spé (voir un sujet de 2006, page 4 pour un exemple (PDF, 1.4 Mo)).
daxou31 :
Pourtant c'est très simple : tu parcours ton tableau, en gardant dans une liste les cinq plus grands éléments déjà rencontrés. À moi, cela me paraît plus naturel que de trier le tableau puis de lire les cinq derniers éléments. Encore une fois, j'admets que ce qui me paraît naturel ne paraît pas forcément évident aux autres.
C'est surtout la fonction avec les valeur que je ne comprend pas !
Le (concat(élément, Nil)) je ne vois pas ce que c'est le Nil ?
En plus il faut le traduire en AS !!
Tu as des listes chainées en AS ?
Nil représente la liste vide, et "concat" (on dit "cons" en général mais osef) représente l'ajout d'un élément à une liste.
[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.
Si y'a pas d'accents dans mes messages c'est parce que je suis sur un clavier norvegien :)