
Envoyé par
mauroyb0
Bonjour,
J'aurais voulu utiliser une regex pour chercher la clef d'un hash, mais je ne sais pas comment m'y prendre. je m'explique... la clef pourrait etre "12345; 394857" par exemple et j'aimerais pouvoir sélectionner cette clef quand je cherche 12345 sans la suite...
quelqu'un pourrait-il m'aider?
Le gros problème d'une telle approche, c'est quela recherche sur une portion de clef, par expression rationnelle, fait perdre tout le bénéfice de la structure du hachage qui est destinée à accélérer les recherches.
Je m'explique :
- un hachage est une structure de données qui permet, pour une "clef" de retrouver immédiatement l'élément associé. C'est excessivement performant car il existe une relation entre la clef (prise dans sa totalité) et la position de l'élément en mémoire. Cette relation est souvent appelée "fonction de hachage".
- Une recherche sur une partie de clef ne peut pas utiliser cette fonction de hachage. En effet, n'ayant qu'une partie de clef, on ne peut pas déterminer la position de l'élément associé en mémoire. Il n'y a, alors, pas d'autre choix que d'examiner TOUTES les clefs (leur liste est connue), pour vérifier lesquelles correspondent.
Il est évident que ce parcours exhaustif n'a alors rien de performant et qu'il ne tire aucun parti des optimisations du stockage que fournissent les tables de hachage.
Cependant, connaissant ces contraintes, il est possible de créer une liste des clefs correspondant à un critère, afin de pouvoir indexer une tranche de hachage :
my @clefs_retenues = grep { /mon_motif/ } keys (%hachage);
Partager