Il existe déjà les objets ScriptingDictionary et la prochaine release (la beta actuelle) offre le type natif Map permettant des clés de type chaîne ou entier associées à des valeurs de tout type AutoIt :
Bonjour,
Et comment fait on pour récupérer les valeurs de _Hash_Find et _Hash_FindbyValue ?
J'ai essayé comme ceci:
Global $hash
_Hash_Creat($hash)
_Hash_Add($hash, "Bébé", "Petit")
_Hash_Add($hash, "Homme", "Grand")
$bebe = _Hash_Find($hash, "Bébé")
MsgBox(0,"",$bebe) ;Renvoi: "Petit"
MsgBox(0,"",_Hash_FindbyValue($hash, "Petit"))
et dans les 2 cas, la valeur retournée est 0
Cordialement,
Walkson "Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Je ne comprends pas : Quel intérêt d'utiliser ta fonction plutôt que "Assign" et "Eval", qui font ça très bien ?
Quant au nom, c'est toi qui l'a inventé ? Parce que dans mon esprit, ce que tu fais s'appelle toujours un array (en tous cas, c'est comme ça en PHP), et un hash correspond plus à une fonction type MD5, SHA1, etc... Une sorte de "cryptage" irréversible (qui n'est donc pas du cryptage, mais je ne trouve pas meilleure définition).
Que ce soit un objet ScriptingDictionary, une Map AutoIt ou PHP, c'est toujours un conteneur de paires {clé, valeur} qui ne demande pas de redimensionnement sur insertion ou effacement et n'a (en général) pas d'ordre particulier.
Le domaine d'emploi n'est pas le même que celui des tableaux.
Par contre Assign et Eval n'ont qu'une utilité extrêmement restreinte (voire nulle) et sont à proscrire dans 99,999% des cas et perso je dirais 100%.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
J'ai corriger une petit erreur de ma part dans l'UDF
Sinon pourquoi opter pour cette UDF au lieu des divers fonction et autre moyen possibles? la raison est qu'il est possible d’enregistrer cette hash dans un fichier (comme une string) et de la réutiliser dans le langage ruby avec la fonction "eval" en fait c'est la principal raison pour la quelle j'ai créer cette UDF.
En espèrent avoir éclairci un peu sur le sujet
Sinon pourquoi opter pour cette UDF au lieu des divers fonction et autre moyen possibles? la raison est qu'il est possible d’enregistrer cette hash dans un fichier (comme une string) et de la réutiliser dans le langage ruby avec la fonction "eval" en fait c'est la principal raison pour la quelle j'ai créer cette UDF.
Tu peux faire exactement la même chose avec le type map, non ? D'accord c'est encore dans la beta mais Jon va nous ficeler une version production sous peu.
Idem avec un Scripting.Dictionary et ça c'est dispo depuis un bail.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Je n'ai pas dit que cela ne fonctionnait pas. Ma question est plutôt : "qu'est-ce qui t'empêche de faire la même chose avec un ScriptingDictionary ou un (nouveau, certes) type Map ?"
Parce que non seulement la vélocité n'est pas au rendez-vous, mais si soit une clé soit une valeur contient une virgule, ton UDF part à dame.
#include "hash.au3"
Local $vHash, $limit = 20000
_Hash_Creat($vHash)
Local $t = TimerInit()
For $i = 1 To $limit
_Hash_Add($vHash, String($i), String($i))
Next
ConsoleWrite(StringFormat("Hash with %i elements created in %.2f", $limit, TimerDiff($t) / 1000) & " s" & @LF)
Local $oSC = ObjCreate("Scripting.Dictionary")
$t = TimerInit()
For $i = 1 To $limit
$oSC.Add(String($i), String($i))
Next
ConsoleWrite(StringFormat("Scripting dictionary with %i elements created in %.2f", $limit, TimerDiff($t) / 1000) & " s" & @LF)
Local $mMap[]
$t = TimerInit()
For $i = 1 To $limit
$mMap[String($i)] = String($i)
Next
ConsoleWrite(StringFormat("Map with %i elements created in %.2f", $limit, TimerDiff($t) / 1000) & " s" & @LF)
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.