Page 4 sur 4

Re: PureBasic 4.40 Beta1 released!

Publié : sam. 12/sept./2009 10:51
par GeBonet
Les fonctions MAP

Voici ci après un aperçu de ce que j'ai pu pécher sur cette possibilité de qui viens s'ajouter au List() et Array()

C'est une forme de tableau ou list avec "Clef" d'accès....
Le code ci après n'est qu'une série (limitée) d'exemples d'utilisation ...

Code : Tout sélectionner

; -------------------------------------------------------------------------------------------
;                Map exemple   :  ou Table avec clef d'accès unique...
; -------------------------------------------------------------------------------------------
;
;  Commandes disponibles :
;
; AddMapElement(Map(), Key$ [, Flags])    - Ajoute un nouvel élément vide dans la "map" ou (table()).
; ClearMap(Map())                                 - Efface tout les éléments dans la "map" et libère la mémoire.
; FindMapElement(Map(), Key$)                - Cherche l'élément spécifié dans la "map".
; DeleteMapElement(Map() [, Key$])          - Enlève l'élément en cours de la "map" .
; MapKey(Map())                                   - Renvois la Clef de l'élément courant de la map.
; MapSize(Map())                                  - Renvois le nombre d'éléments contenu dans la "map".
; NextMapElement(Map())                       - Déplace l'élément courent vers le suivant dans la "map".
; ResetMap(Map())                                - Déplace le pointeur en tête de la "map"
;
; Map()                                 - Accède à l'élément courant dans la "map"
; Map("key")                          - Accède à l'élément correspondant à la clef et il devient l'élément courant 
; -----------------------------------------------------------------------------------------------------------------------
; Une table de hachage est une Structure de données qui permet une association clé-élément.
;
; ==================================================================
;   Autre Exemple / Other sample  : 
; ==================================================================
    NewMap Test.s() ; Table indexé selon le Hascode Sur la Clef .....
    Dim T$(5)           ; Table qui contiendrait les clefs.... indépendamment de  Test.s()
    ;                            
    ;                               Ordre de création ....
    ;
    T$(1)="Fred"      :Test(T$(1)) = "1 -Toute une phrase qui contient tout les élément désiré "
    T$(2)="Timo"     :Test(T$(2)) = "2- deux ou 2"
    T$(3)="Albert"    :Test(T$(3)) = "3- Et ceci c'est le complément"
    T$(4)="Joseph" :Test(T$(4)) = "4- c'est une série B"
    T$(5)="Dorothe":Test(T$(5)) = "5- It's not a joke but not serious"
    ;--------------------------------------------------------
    Debug " == Organisation de la table selon le Hash coding de Map ==="
    ResetMap(Test())                        ; - Deplace le pointeur en tête de la "map"
    While NextMapElement(Test())
        Debug Str(l+1)+" - "+Test()       ;  Ici l'ordre dans la table 
        l+1
    Wend
    l=0
    Debug "====================================================="   
    Debug " Ordre selon l'appel par les clefs... donc de l'enregistrement correspondant"    
    Debug "-----------------------------------------------------------------------------------------"
     ;---------------------------------------------------------------------------------------------    
    ;  Ordre d'extraction par appel en utilisant la clef  
    ;--------------------------------------------------------------------------------------------- 
    ;  1 on appelle la première clef du de T$(1)
    FindMapElement(Test.s(), "Fred")                  ; Forme de passage de la clef en l'écrivant
        Debug "Fred="+Test.s()
    
    ;  2  on appelle la quatrième clef de T$(4)
    FindMapElement(Test.s(), "Joseph")
        Debug "Joseph"+"="+Test.s()
    
    ;   3 on appelle la cinquième clef de T$(5)
    FindMapElement(Test.s(), "Dorothe")
        Debug "Dorothe"+"="+Test.s()
    
    ;  4  on appelle la cinquième clef de T$(2)
    B$="Timo"
    FindMapElement(Test.s(), B$)                       ; Ici elle est donnée par une variable.... 
        Debug B$+"="+Test.s()
    
    ; 5  on passe la cinquième clef par T$(3)
        FindMapElement(Test.s(), T$(3))
        Debug B$+"="+Test.s()
        
    ; ----------------------------------------------------------------------------------------------    
    Debug "===== Numero element ======="
    Debug "Donné par MapSize()="+Str(MapSize(Test()))
    Debug "========================="        
    ; ---------------------------------------------------------------------------------------------- 
    ResetMap(Test())                    ;  - Deplace le pointeur en tête de la "map"
    
    While NextMapElement(Test())
        Debug Str(l+1)+" - "+Test()    ;  Ici l'ordre dans la table 
        l+1
    Wend
    
    Debug "======================="   
    Debug " classement par ordre des clefs"
    Debug "-------------------------------------------------"
    ;                                            OU 
    ResetMap(Test())                        ;  - Deplace le pointeur en tête de la "map"
    For i=1 To 5
        Debug Str(i)+" - "+Test(T$(i)) ; recupère par la clef... par le tablean T$(i)... 
    Next i        
    Debug "--------------- Autre forme d'utilisation de Map -----------------"
    ; ******************************************************************
    FindMapElement(Test.s(),InputRequester("Recherche","Donnez la clef d'accès : ", Clef$))
    MessageRequester("Votre réponse est : ",Test.s(),#PB_MessageRequester_Ok  )
    ;
    Debug Test.s()
    Debug "---------------- FIN -------------------------"
    ;
    ClearMap(Test.s()) 
    
End
En exécutant cela permet de bien comprendre l'action et les différentes formes d'usage...
Pour qui était intéressé par un outil de gestion simple... En voilà un.

Détail : Je n'ai pas enore trouvé ce que l'on obtenais avec :
le "Flag" de "AddMapElement(Map(), Key$ [, Flags])"
Clef inséré en ordre alpha....? Ou ??

Ce qui est certains c'est que les clefs sont unique... Pas de double admit...
Voilà, voilà, A+ :lol: