Donc je le poste ici si jamais quelqu'un en a besoin.
Les clés peuvent êtres de trois types (entier, flottant ou chaîne de caractères), sachant qu'une HashMap doit avoir toutes ses clés du même type (pour éviter les conflits).
Voici un petit exemple :
#cs ----------------------------------------------------------------------------
AutoIt Version : 3.3.12.0
Auteur: TT22
Fonction du Script :
Exemple d'utilisation de l'UDF HashMap
#ce ;---------------------------------------------------------------------------
#include "HashMap.au3"
; Crée une table avec des clés en chaînes de caractères
$HashMap = _HashMapCreate("String")
$error = @error
If $error Then Exit MsgBox(16, @ScriptName, "Error _HashMapCreate()" & @CRLF & "@error : " & $error)
; On y met des valeurs
_HashMapPut($HashMap, "Key1", "This is my 1st value!")
_HashMapPut($HashMap, "Key2", "This is my 2nd value!")
_HashMapPut($HashMap, "Key1", "This is my 1st value modified!")
_HashMapPut($HashMap, "Key3", 3.1415926535)
_HashMapPut($HashMap, "Key4", 42)
; On en supprime une
_HashMapRemove($HashMap, "Key3")
$error = @error
If $error Then Exit MsgBox(16, @ScriptName, "Error _HashMapRemove()" & @CRLF & "@error : " & $error)
; On les récupères
MsgBox(0, "Key1", _HashMapGet($HashMap, "Key1") & @CRLF & "@error : " & @error)
MsgBox(0, "Key2", _HashMapGet($HashMap, "Key2") & @CRLF & "@error : " & @error)
MsgBox(0, "Key3", _HashMapGet($HashMap, "Key3") & @CRLF & "@error : " & @error) ; Doit retourner une erreur (car supprimée)
MsgBox(0, "Key4", _HashMapGet($HashMap, "Key4") & @CRLF & "@error : " & @error)
; Nombre d'élémentes
MsgBox(0, @ScriptName, "_HashMapSize($HashMap) : " & _HashMapSize($HashMap))
; On essaye de remplir avec plein de valeurs et une table à clé flottantes
$HMDouble = _HashMapCreate("Double", 100)
For $i = 0 To 1000 Step 1 ; Création
_HashMapPut($HMDouble, $i/1000, $i)
Next
For $i = 0 To 1000 Step 1 ; Vérification
$v = _HashMapGet($HMDouble, $i/1000)
If @error Then Exit MsgBox(16, @ScriptName, "Error _HashMapGet()" & @CRLF & "@error : " & @error)
If $v <> $i Then Exit MsgBox(16, @ScriptName, "Error _HashMapGet() : Wrong value!")
Next
MsgBox(64, @ScriptDir, "Everything works perfectly!")
AutoIt Version : 3.3.12.0
Auteur: TT22
Fonction du Script :
Exemple d'utilisation de l'UDF HashMap
#ce ;---------------------------------------------------------------------------
#include "HashMap.au3"
; Crée une table avec des clés en chaînes de caractères
$HashMap = _HashMapCreate("String")
$error = @error
If $error Then Exit MsgBox(16, @ScriptName, "Error _HashMapCreate()" & @CRLF & "@error : " & $error)
; On y met des valeurs
_HashMapPut($HashMap, "Key1", "This is my 1st value!")
_HashMapPut($HashMap, "Key2", "This is my 2nd value!")
_HashMapPut($HashMap, "Key1", "This is my 1st value modified!")
_HashMapPut($HashMap, "Key3", 3.1415926535)
_HashMapPut($HashMap, "Key4", 42)
; On en supprime une
_HashMapRemove($HashMap, "Key3")
$error = @error
If $error Then Exit MsgBox(16, @ScriptName, "Error _HashMapRemove()" & @CRLF & "@error : " & $error)
; On les récupères
MsgBox(0, "Key1", _HashMapGet($HashMap, "Key1") & @CRLF & "@error : " & @error)
MsgBox(0, "Key2", _HashMapGet($HashMap, "Key2") & @CRLF & "@error : " & @error)
MsgBox(0, "Key3", _HashMapGet($HashMap, "Key3") & @CRLF & "@error : " & @error) ; Doit retourner une erreur (car supprimée)
MsgBox(0, "Key4", _HashMapGet($HashMap, "Key4") & @CRLF & "@error : " & @error)
; Nombre d'élémentes
MsgBox(0, @ScriptName, "_HashMapSize($HashMap) : " & _HashMapSize($HashMap))
; On essaye de remplir avec plein de valeurs et une table à clé flottantes
$HMDouble = _HashMapCreate("Double", 100)
For $i = 0 To 1000 Step 1 ; Création
_HashMapPut($HMDouble, $i/1000, $i)
Next
For $i = 0 To 1000 Step 1 ; Vérification
$v = _HashMapGet($HMDouble, $i/1000)
If @error Then Exit MsgBox(16, @ScriptName, "Error _HashMapGet()" & @CRLF & "@error : " & @error)
If $v <> $i Then Exit MsgBox(16, @ScriptName, "Error _HashMapGet() : Wrong value!")
Next
MsgBox(64, @ScriptDir, "Everything works perfectly!")
; #INDEX# ===============================================================================
; Title .........: HashMap
; AutoIt Version : 3.3.12.0
; Language ......: English
; Description ...: Implements an HashMap system (Java like)
; Author(s) .....: TT22
; =======================================================================================
; #CURRENT# =============================================================================
; _HashMapCreate
; _HashMapPut
; _HashMapGet
; _HashMapRemove
; _HashMapGetKeyType
; _HashMapIsValid
; =======================================================================================
; #FUNCTION# ============================================================================
; Name...........: _HashMapCreate
; Description ...: Creates an HashMap
; Syntax.........: _HashMapCreate ( [$KeyType = "String" [, $iMapSize = 100 [, $HashAlg = $CALG_MD5]]] )
; Parameters ....: $KeyType - The type of the keys ("Int32", "Double" or "String")
; $iMapSize - Size of the map (at least 2)
; $HashAlg - The algorithm to use for hash keys (from <Crypt.au3>)
; Return values .: Success - An HashMap
; Error - False
; Author ........: TT22
; Modified.......: 01/12/2016
; =======================================================================================
; #FUNCTION# ============================================================================
; Name...........: _HashMapPut
; Description ...: Store an element into an HashMap
; Syntax.........: _HashMapPut ( ByRef $HashMap, $Key, $Value )
; Parameters ....: $HashMap - The HashMap in which to add the value
; $Key - The key (must be in the type of the HashMap keys!)
; $Value - The value to store
; Return values .: Success - True
; Error - False
; Author ........: TT22
; Modified.......: 01/12/2016
; Related .......: _HashMapGet, _HashMapRemove
; =======================================================================================
; #FUNCTION# ============================================================================
; Name...........: _HashMapGet
; Description ...: Get an element from an HashMap
; Syntax.........: _HashMapGet ( ByRef $HashMap, $Key )
; Parameters ....: $HashMap - The HashMap in which to get the value
; $Key - The key (must be in the type of the HashMap keys!)
; Return values .: Success - The value stored at the key
; Error - False and set @error to a non zero value
; Author ........: TT22
; Modified.......: 01/12/2016
; Remarks .......: The key is case sensitive!
; Related .......: _HashMapPut, _HashMapRemove
; =======================================================================================
; #FUNCTION# ============================================================================
; Name...........: _HashMapRemove
; Description ...: Remove an element from an HashMap and return it
; Syntax.........: _HashMapRemove ( ByRef $HashMap, $Key )
; Parameters ....: $HashMap - The HashMap in which to remove the value
; $Key - The key (must be in the type of the HashMap keys!)
; Return values .: Success - The value stored at the key
; Error - False and set @error to a non zero value
; Author ........: TT22
; Modified.......: 01/12/2016
; Remarks .......: The key is case sensitive!
; Related .......: _HashMapPut, _HashMapGet
; =======================================================================================
; #FUNCTION# ============================================================================
; Name...........: _HashMapSize
; Description ...: Return the number of elements in the HashMap
; Syntax.........: _HashMapSize ( ByRef $HashMap )
; Parameters ....: $HashMap - The HashMap where to count
; Return values .: Success - The number of elements
; Error - False and set @error to a non zero value
; Author ........: TT22
; Modified.......: 01/12/2016
; =======================================================================================
; #FUNCTION# ============================================================================
; Name...........: _HashMapGetKeyType
; Description ...: Return the key type of an HashMap
; Syntax.........: _HashMapGetKeyType ( ByRef $HashMap )
; Parameters ....: $HashMap - The HashMap we want to get the key type
; Return values .: Success - "Int32", "Double" or "String"
; Error - False
; Author ........: TT22
; Modified.......: 01/12/2016
; =======================================================================================
; #FUNCTION# ============================================================================
; Name...........: _HashMapIsValid
; Description ...: Check if an HashMap is valid
; Syntax.........: _HashMapIsValid( ByRef $HashMap)
; Parameters ....: $HashMap - The HashMap to check
; Return values .: Success - True
; Error - False
; Author ........: TT22
; Modified.......: 01/12/2016
; =======================================================================================
; Title .........: HashMap
; AutoIt Version : 3.3.12.0
; Language ......: English
; Description ...: Implements an HashMap system (Java like)
; Author(s) .....: TT22
; =======================================================================================
; #CURRENT# =============================================================================
; _HashMapCreate
; _HashMapPut
; _HashMapGet
; _HashMapRemove
; _HashMapGetKeyType
; _HashMapIsValid
; =======================================================================================
; #FUNCTION# ============================================================================
; Name...........: _HashMapCreate
; Description ...: Creates an HashMap
; Syntax.........: _HashMapCreate ( [$KeyType = "String" [, $iMapSize = 100 [, $HashAlg = $CALG_MD5]]] )
; Parameters ....: $KeyType - The type of the keys ("Int32", "Double" or "String")
; $iMapSize - Size of the map (at least 2)
; $HashAlg - The algorithm to use for hash keys (from <Crypt.au3>)
; Return values .: Success - An HashMap
; Error - False
; Author ........: TT22
; Modified.......: 01/12/2016
; =======================================================================================
; #FUNCTION# ============================================================================
; Name...........: _HashMapPut
; Description ...: Store an element into an HashMap
; Syntax.........: _HashMapPut ( ByRef $HashMap, $Key, $Value )
; Parameters ....: $HashMap - The HashMap in which to add the value
; $Key - The key (must be in the type of the HashMap keys!)
; $Value - The value to store
; Return values .: Success - True
; Error - False
; Author ........: TT22
; Modified.......: 01/12/2016
; Related .......: _HashMapGet, _HashMapRemove
; =======================================================================================
; #FUNCTION# ============================================================================
; Name...........: _HashMapGet
; Description ...: Get an element from an HashMap
; Syntax.........: _HashMapGet ( ByRef $HashMap, $Key )
; Parameters ....: $HashMap - The HashMap in which to get the value
; $Key - The key (must be in the type of the HashMap keys!)
; Return values .: Success - The value stored at the key
; Error - False and set @error to a non zero value
; Author ........: TT22
; Modified.......: 01/12/2016
; Remarks .......: The key is case sensitive!
; Related .......: _HashMapPut, _HashMapRemove
; =======================================================================================
; #FUNCTION# ============================================================================
; Name...........: _HashMapRemove
; Description ...: Remove an element from an HashMap and return it
; Syntax.........: _HashMapRemove ( ByRef $HashMap, $Key )
; Parameters ....: $HashMap - The HashMap in which to remove the value
; $Key - The key (must be in the type of the HashMap keys!)
; Return values .: Success - The value stored at the key
; Error - False and set @error to a non zero value
; Author ........: TT22
; Modified.......: 01/12/2016
; Remarks .......: The key is case sensitive!
; Related .......: _HashMapPut, _HashMapGet
; =======================================================================================
; #FUNCTION# ============================================================================
; Name...........: _HashMapSize
; Description ...: Return the number of elements in the HashMap
; Syntax.........: _HashMapSize ( ByRef $HashMap )
; Parameters ....: $HashMap - The HashMap where to count
; Return values .: Success - The number of elements
; Error - False and set @error to a non zero value
; Author ........: TT22
; Modified.......: 01/12/2016
; =======================================================================================
; #FUNCTION# ============================================================================
; Name...........: _HashMapGetKeyType
; Description ...: Return the key type of an HashMap
; Syntax.........: _HashMapGetKeyType ( ByRef $HashMap )
; Parameters ....: $HashMap - The HashMap we want to get the key type
; Return values .: Success - "Int32", "Double" or "String"
; Error - False
; Author ........: TT22
; Modified.......: 01/12/2016
; =======================================================================================
; #FUNCTION# ============================================================================
; Name...........: _HashMapIsValid
; Description ...: Check if an HashMap is valid
; Syntax.........: _HashMapIsValid( ByRef $HashMap)
; Parameters ....: $HashMap - The HashMap to check
; Return values .: Success - True
; Error - False
; Author ........: TT22
; Modified.......: 01/12/2016
; =======================================================================================