Comparaison de valeurs dans deux Hash

Comparaison de valeurs dans deux Hash - Perl - Programmation

Marsh Posté le 10-04-2008 à 16:12:48    

Bonjour à tous,  :hello:  
 
Je viens ici vous exposer mon problème, car débutant en Perl, je n'arrive pas à trouver une réponse évidente a ma question à travers les divers pdf que le sujet que j'ai pu lire
 
je dispose de deux tableaux associatifs
%collection1
%collection2
 
je l'ai rempli ainsi (via une lecture dans un fichier)
 

%collection1 = (
         $enseigne => $modele,
);

Si j'ai tout bien compris je devrais avoir un tableau ainsi si on l'imagine "humainement"

|Enseigne | Modèle |
--------------------
| Pegeot  | 206    |
| Pegeot  | 306    |
| Pegeot  | 207    |
| Citroën | C2     |
| Citroën | C3     |
| Renault | R5     |
--------------------

je voudrais faire un test pour comparer les deux collections
Le but serait pour chaque enseigne, de regarder si les deux collections partagent au moins un modèle
 
Si oui, ajouter cette enseigne dans @commun, qui est un simple tableau
 
Si vous aviez une petit idée de comment faire cela, je vous en serais reconnaissant !

Reply

Marsh Posté le 10-04-2008 à 16:12:48   

Reply

Marsh Posté le 10-04-2008 à 16:21:07    

y a certainement des modules pour faire ça, mais ça me vient pas là.
 
avec values %mon_hash, ça te file les modèles, après tu peux comparer, chercher des correspondances.

Reply

Marsh Posté le 10-04-2008 à 16:34:59    

KuKrApOk a écrit :

Si j'ai tout bien compris je devrais avoir un tableau ainsi si on l'imagine "humainement"

|Enseigne | Modèle |
--------------------
| Pegeot  | 206    |
| Pegeot  | 306    |
| Pegeot  | 207    |
| Citroën | C2     |
| Citroën | C3     |
| Renault | R5     |
--------------------



presque mais ratal :o, tu as

|key | value |
--------------------
| Pegeot  | 207    |
| Citroën | C3     |
| Renault | R5     |
--------------------


ce n'est pas parce que ta variable s'appelait $enseigne; qu'il en va de même pour la colonne.
Par ailleurs les clés sont "uniques" dans une hash, tu ne peux pas avoir plusieurs éléments pour la même clé juste en faisant $collection1{$enseigne} = $modele;

 

Le plus simple va être de transformer ta 2eme colonne afin qu'elle contienne (une ref sur ) un tableau et non plus un simple element.

 

Une fois que tu auras réussi on passera à la fonction de comparaison de 2 hashs.
Mais voila déjà la recette du cookbook pour identifier les clés communes à 2 hashs.

Code :
  1. my @common = ();
  2. foreach (keys %hash1) {
  3.    push(@common, $_) if exists $hash2{$_};
  4. }


ça devrait te donner des pistes ;)


Message édité par anapajari le 10-04-2008 à 16:35:34

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed