lucas_bwd 0 Denunciar post Postado Junho 27, 2010 Ae galera, Bem simples: Eu tenho um jogo com um ranking que é um array que contem os seguintes atributos: gols e tempo. A idéia é que o primeiro critério de ranking é o numero de gols e que o segundo critério é o tempo. O lance é que o número de gols tem que ser decrescente e o tempo crescente (quem marcou mais gols em menos tempo, sendo o menor tempo criterio de desempate). Algo assim: array[0] = {gols:15, tempo:15}; array[0] = {gols:15, tempo:20}; array[0] = {gols:12, tempo:30}; array[0] = {gols:10, tempo:5}; Isso é salvo em um XML então a ordem la ta bagunçada e tem que ser ordenada no flash. Eu to usando a função sortOn que funciona parcialmente: ranking.sortOn(["goals", "time"], Array.NUMERIC | Array.DESCENDING); Ele funciona pra ordenar pelo número de gols, mas o tempo também é decrescente. Então o cara que fez 15 gols em 20 segundos é melhor rankeado que o que fez 15 gols em 15 segundos, o que tá errado. Então eu preciso de um segundo critério de ordenação pro segundo campo. Alguma idéia? Lucas Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Junho 28, 2010 Aqui colega: var array:Array = new Array(); array.push({gols:15, tempo:15}); array.push({gols:15, tempo:20}); array.push({gols:12, tempo:30}); array.push({gols:10, tempo:5}); function order(a, b,c,d):Number { var tempo1:String = a.tempo; var tempo2:String = b.tempo; var gol1:String = c.gols; var gol2:String = d.gols; if (gol1<gol2) { if (tempo1<tempo2) { return -1; }else if (tempo1>tempo2) { return 1; }else { return 0; } } else if (gol1>gol2) { return 1; } else { return 0; } } array.sort(order); for(i=0;i<array.length;i++){ trace("Gols: " + array[i].gols +", Tempo: "+ array[i].tempo) } //Output /* Gols: 15, Tempo: 15 Gols: 15, Tempo: 20 Gols: 12, Tempo: 30 Gols: 10, Tempo: 5 */ Abraços Compartilhar este post Link para o post Compartilhar em outros sites
lucas_bwd 0 Denunciar post Postado Junho 30, 2010 Fala cara, Tive que mudar um pouquinho a função, mas tu deu a luz. Valeu. Pra quem precisar aí algo parecido. function sortGoals(a:Object, b:Object):Number { var time1:uint = a.time; var time2:uint = b.time; var score1:uint = a.goals; var score2:uint = b.goals; if(score1 < score2) { return 1; } else if(score1 > score2) { return -1; } else { if(time1 < time2) { return -1; } else if(time1 > time2) { return 1; } else { return 0; } } } ranking.sort(sortGoals); Compartilhar este post Link para o post Compartilhar em outros sites