A propos des Hash Tables

Résolu
cs_Squallou Messages postés 249 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 15 juillet 2006 - 5 mai 2005 à 02:08
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 - 10 janv. 2006 à 17:36
Bonjour tout le monde.
Je suis à fond dans les Hash Tables en ce moment et il y a une chose que je ne comprends pas : l'ordre de création. Je m'explique :
si je fais :
/hadd TEST UN un
/hadd TEST DEUX deux

et que je vérifie le contenu de la table (avec un echo -a $hget(TEST,1).item $hget(TEST,1).data et $hget(TEST,2).item $hget(TEST,2).data), j'obtiens :
UN un
DEUX deux

jusque là ok pas de pb...

MAIS si je fais :
/hadd TEST DEUX deux
/hadd TEST UN un

et que je revérifie le contenu j'obtiens :
UN un
DEUX deux

et là est le pb puisque j'avais inversé l'ordre de création de chaque item et de leur valeur !
Alors pk j'obtiens que l'item 1 est "UN" dans les 2 cas alors que je ne le crée pas au même moment dans chaque cas ?
Quel logique dans la création d'un item (et éventuellement de sa valeur) ?

Merci de m'aider car ça me serait très utile de comprendre ça ^^"

23 réponses

cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
5 mai 2005 à 12:25
Euh, comme le précise l'aide mirc,
$hget(Table,N).item c'est pas la bonne facon d'utiliser les hashtables,
c'est pas efficace... si tu stockes le contenu d'une combobox
simplement, pourquoi tu fais pas ca ? :

1 > Ligne1

2 > Ligne2

3 > Ligne3



Et ensuite qd tu la charges :

did -r $dname ID

var %i 1

while $hget(Table,%i) {

did -a $dname ID $ifmatch

inc %i

}



PaDa
3
MaX_62 Messages postés 879 Date d'inscription vendredi 22 octobre 2004 Statut Membre Dernière intervention 29 juin 2007
5 mai 2005 à 07:21
C'est vrai, l'ordre de création des items s'inverse tout le temps. Je ne sais pas pourquoi, mais c'est pas ce qu'il y'a de plus important je pense



-=[MaX_62]=-
0
cs_clem54 Messages postés 253 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 16 octobre 2005
5 mai 2005 à 09:33
MaX_62 j'ai une bonne nouvelle pour toi :p :

Je me met au HashTables
0
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
5 mai 2005 à 10:01
Dans les hashtables, un item est associé a une
valeur, mais l'ordre de création n'a pas d'importance et n'est surtout
pas pris en compte... (je suppose que c'est pour des pb d'optimisations
internes, les hashtables sont stockées en mémoire vive et pas sous une
forme aussi simple que les .ini)

Si tu veux garder un ordre de création, tu peux par exemple faire une
autre table dans laquelle tu stockerais tes infos en "N >
ItemDeLa2eTable"

PaDa
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Huitre Messages postés 290 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 29 février 2008
5 mai 2005 à 10:20
Si tu as deja cree un item UN et que tu hadd derriere, mirc mets à jour le contenu de UN.



Pour vérifier l ordre des items :



alias showittome {

var %i 1

While ( $hget(mytable,%i).item ) {

echo -a $hget(mytable,%i).item

inc %i

}

}



Voila, cet alias parcours tous les item de la table en partant de %i à n et te les affiche.

A part avec Hload, mirc donne l impression de classer alphabetiquement les donnes.
0
cs_Squallou Messages postés 249 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 15 juillet 2006
5 mai 2005 à 11:37
J'explique pk l'ordre m'est important :
J'ai une combobox à laquelle l'utilisateur on peut ajouter des éléments. Le contenu de cette combobox est stockée dans une HTable (et mis à jour à chaque fois qu'un élément y est ajouté).
De manière à ce que quand on rouvre la fenetre, les items de la HTable se remettent dans la combobox.
Et s'ils sont inversés, comprenez bien que si le dernier élément ajouté à la combobox (donc tout en bas) se retrouve tout en haut, mon script a l'air un peu con lol

C'est dommage ce petit inconvénient :( moi qui était tombé amoureux des HTables v_v. J'attend encore un peu qq réponses avant de valider. Au cas où une solution miracle serait trouvée lol

Merci à vous en tout cas =)
0
Nolson Messages postés 216 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 16 mars 2006
5 mai 2005 à 11:52
Utilise un système de double table comme te l'a proposé PaDa.
Une pour enregistrer les valeurs de tes items et une pour enregistrer l'ordre d'enregistrement des items.
0
fjxokt Messages postés 840 Date d'inscription vendredi 28 janvier 2005 Statut Membre Dernière intervention 25 février 2009 1
5 mai 2005 à 12:08
si tu dis que seul le dernier element se retrouve en
premiere position, et bien tu mn'as qu'a charger ta table a partir du
second, pour finir par le premier
0
cs_Squallou Messages postés 249 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 15 juillet 2006
5 mai 2005 à 12:23
lol non c pas tjs le cas c'est complètement dans le désordre en fait je disais ça pour simplifier c'était qu'une image lol. Tout est dans le désordre en fait. v_v
0
fjxokt Messages postés 840 Date d'inscription vendredi 28 janvier 2005 Statut Membre Dernière intervention 25 février 2009 1
5 mai 2005 à 12:25
tu pourrai donner un petit exemple de ce que tu charge dans ta table ?
0
cs_Squallou Messages postés 249 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 15 juillet 2006
5 mai 2005 à 12:44
Oui PaDa c'est ce que je fais pour charger le contenu de ma HTable dans ma Combo.
Mais le problème est :
En fermant ma fenetre, comment stoker la 1ere ligne dans le 1er item de la table, la 2eme ligne dans le 2eme item etc...
Comment conserver l'ordre ?
0
fjxokt Messages postés 840 Date d'inscription vendredi 28 janvier 2005 Statut Membre Dernière intervention 25 février 2009 1
5 mai 2005 à 12:48
tu n'as qu'as nommer tes items par des nombres, dans l'ordre que tu veux, de maniere a les classer plus facilement
0
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
5 mai 2005 à 12:52
Comme je viens de te dire deux posts plus haut quoi [...]

PaDa
0
cs_Squallou Messages postés 249 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 15 juillet 2006
5 mai 2005 à 12:57
ha okkkkkkkkkkkk j'avais pa comprendu !! lol
en effet c'est pas bête et j'y avais pas pensé...
jsuis déçu de pas y avoir pensé v_v

jpense que ça va bien m'aider en effet.
Merci à vous tous, vous êtes supers ^^
0
Nolson Messages postés 216 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 16 mars 2006
5 mai 2005 à 13:12
Ceci fonctionne uniquement si on a pas besoin de nommer spécifiquement les items, et apparemment c'est ton cas. Mais si tu as besoin de nommer les items d'une certaine façon et que tu as besoin de connaitre l'ordre d'enregistrements des items, il faut se servir de deux tables.
0
cs_Squallou Messages postés 249 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 15 juillet 2006
5 mai 2005 à 14:20
En fait je voulais faire ça :
serveur1
#chan1 #chan2 #chan3
serveur2
#chan1 #chan2 #chan3

et restituer les serveur dans la combo et les chan dans une liste

mais du coup c'est devenu :
1
serveur1:#chan1 #chan2 #chan3
2
serveur2:#chan1 #chan2 #chan3

évidemment j'utilise des tokens pour tout décomposer ^^
voilà encore merci à tous ^^
0
fjxokt Messages postés 840 Date d'inscription vendredi 28 janvier 2005 Statut Membre Dernière intervention 25 février 2009 1
5 mai 2005 à 14:48
vive les autojoins
0
cs_Squallou Messages postés 249 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 15 juillet 2006
5 mai 2005 à 14:58
Oui fjxokt ^^
jcompte utiliser les Htables pour toutes mes autres fenetres mais en effet (et ct pas dur à deviner v_v) là c'est celle de l'autojoin lol
0
carpediem666fr Messages postés 122 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 2 novembre 2008
11 mai 2005 à 22:46
j 'ai mis des hash tables en me disant que ct plus rapide que les traditionnels set %toto .. Mais voila :

Achaque sortie de mon script, je fais un hash.save.all vers un fichier pour chaque table

Au demarrage, je fais un hash.load.all pour chaque table aussi (je vous
laisse imaginer les contneeus de ses deux fonctions, le titre etant
assez parlant) . bref, une des tables est systématiquement vide lorsque
je redemarre.. qqun a une idée pourquoi?

CarpeDiem
- http://www.carpescript.tk - VRAI site warez, 100% gratuits
0
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
11 mai 2005 à 23:17
Montre tes aliases hsave.all et hload blabla :)

PaDa
0
Rejoignez-nous