Tri d'item dans une table hash

mr_orus1 Messages postés 89 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 9 avril 2008 - 20 oct. 2006 à 11:06
mr_orus1 Messages postés 89 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 9 avril 2008 - 3 nov. 2006 à 21:48
Bonjour,

voilà, j'aimerai trier des scores dans une table hash par item

j'ai fait ce code qui ne fait pas ce que je voudrais
alias synorang {
 
hmake test 50
  var %x 1
  while (%x <= $ini(synant.ini,scores,0)) {
    set %y $ini(synant.ini,scores,%x)
    hadd test $readini(synant.ini,scores,%y) %Y
    inc %x
  }
}

dans ma table hash ça me retourne, par exemple :
test item 1 machin 6
test item 2 truc 3
test item 3 muche 25

et j'aimerai faire ça :
test item 1 muche 25
test item 2 machin 6
test item 3 truc 3

si quelqu'un a une piste ou une idée, merci par avance

Orus

2 réponses

cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
20 oct. 2006 à 16:52
Si les scores sont sauvegardé dans un .txt, pourquoi les mettres dans une hash table ?
Le mieux est de laissé les scores dans la hash table de cette facon la :
table 1 score1\pseudo1
table 2 score2\pseudo2

ensuite tu fait un alias qui trie avec $sorttok

alias Gatri {
var %a 1 ,%b = $hget(table,0).item while (%a <%b) { var %sort %sort $hget(table,%a).item | inc %a }var %sorttok $sorttok(%sort,32,nr) ,%a 1
while (%a <= %b) { hadd -m %a $token(%sorttok,%a,32) | inc %a }
}

des que ta un nouveau score pour quelqu'un tu verifie qu'il n'existe pas dans la table avec $hfind(table,*pseudo,1,w).data, si il existe, tu sauvegarde ses scores dans une var globale que tu ajoutera au score final, tu l'efface ( le $hfind retourna le nom de l'item et tu as juste a hdel -m table "$hfind" )
Ensuite tu ajoutes le pseudo et le score + l'ancien score s'il y en a un comme ca :
hadd -m table $calc($hget(table,0).item + 1) $+(scoretotal\pseudo) et tu lance l'alias qui tri,
ensuite $hget(table,1) retourne le score et le pseudo du premier etc :)
0
mr_orus1 Messages postés 89 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 9 avril 2008
3 nov. 2006 à 21:48
Bah en fait je mettais dans une table hash parce que de mon fichier .ini, avec la methode de tri que j'employais, ça me mettait tout dans une %var, mais au final, si il y a trop d'inscits, ça rempli la %var et àa me met
*/set ligne trop longue

en fait mon code initial est comme ça (je crois que tu m'a aidé à le faire même :p)

alias classe.1 {  var %a 1 , %b $ini(synant.ini,scores,0)
  while (%a <= %b) {
    var %score = %score $readini(synant.ini,scores,$ini(synant.ini,scores,%a)) $+ - $+ $ini(synant.ini,scores,%a)
    inc %a
  }
  var %tri = $sorttok(%score,32,nr) 
  var %m = $findtok(%tri,$wildtok(%tri,$+(*-,$nick),1,32),1,32)
  msg %synant $syn.top ~~~ $nick occupe la %m $+ $iif(%m <= 1,ère,éme) place avec $readini(synant.ini,scores,$nick) $iif($readini(synant.ini,scores,$nick) <= 1,point,points) (peek)


}


Mais je vais essayer comme tu m'as montré..


Merci

The-Real-Orus-style
0
Rejoignez-nous