• # A propos de liste et de hash

    Posté par (site web personnel) . En réponse au journal Perl, Javouille, Lisaac|(Ruby|SmallTalk|etc..). Évalué à 1.

    Tiens, un truc marrant que j'ai découvert en lua : il n' y a pas de distinction entre une liste et un dictionnaire (map pour les perleux).

    La syntaxe est la même :
    mydict[ mykey ] = myvalue

    bien sur, mykey et myvalue peuvent être de type quelconques, un dictionnaire peut stocker un peu n'importe quoi et la clé doit juste être hashable.

    Lua optimise le choix entre liste et dictionnaire en fonction de la taille de l'ensemble et de la présence de clusters de clés.

    Je ne me souviens plus de l'algo, mais une implémentation naive pourrait être :
    - moins de 10 élements, pas besoin de hash, on fait des listes chaînées et des comparaison de clé direct
    - plus de 10 éléments, moins de 30 éléments mais cluster de clé sous forme d'entiers à valeur proche, on garde une liste chaînée
    - tout le reste, on fait des hash avec des dictionnaires

    Bien sur, l'implémentaiton est plus subtile que ça et optimisée pour des cas réels.

    Au début, j'avais trouvé ça étrange mais en y réfléchissant, je trouve ça plutot sympa. Dans les faits, il y a très peu de différences entre une liste de 3 éléments et un dictionnaire de 3 éléments.

    Si tu réfléchis au hash pour lisaac, il y a peut-être des choses à aller chercher là dedans.