Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1956 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  Perl - Tableau associatif et liste

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Perl - Tableau associatif et liste

n°2326306
phdenis
Posté le 18-12-2018 à 12:58:13  profilanswer
 

phdenis a écrit :

Bonjour à tous,
 
J'ai un problème avec une table de hachage et une liste.
 
J'arrive à créer une table de hachage simple c'est à dire en utilisant le code ci-dessous:
 

Code :
  1. my %Hash=();
  2. $Hash{MyInfoID_01} = MyInfoTitle_01;
  3. $Hash{MyInfoID_02} = MyInfoTitle_02;
  4. $Hash{MyInfoID_03} = MyInfoTitle_03;


 
J'arrive à créer une liste contenant plusieurs valeurs en utilisant le code ci-dessous:

Code :
  1. my @MyDList =();
  2. @MyDList =(DNode_01, DNode_02, DNode_03);
  3. my @MyCList =();
  4. @MyCList =(CNode_01);


 
 
Ce que je cherche à faire est de créer une table de hachage me permettant d'obtenir le résultat suivant:
 

Code :
  1. MyInfoID_01;MyInfoTitle_01;DNode_01;CNode_01
  2. MyInfoID_01;MyInfoTitle_01;DNode_02;
  3. MyInfoID_01;MyInfoTitle_01;DNode_03;
  4. MyInfoID_02;MyInfoTitle_02;DNode_02;
  5. MyInfoID_03;MyInfoTitle_03;DNode_03;CNode_02
  6. MyInfoID_03;MyInfoTitle_03;DNode_04;


 
C'est à dire arriver à lier ma tache de hachage avec ma MyCList ou MyDList afin d'avoir une arbre; j'ai essayé la syntaxe suivante sur la 1ere partie:

Code :
  1. @MyDList = (DNode_01, DNode_02, DNode_03);
  2. @MyCList = (CNode_01);
  3. $Hash{MyInfoID_01} = [MyInfoTitle_01, @MyDList, @MyCList];


 
Mais je n'arrive pas à parser mes listes et à imprimer chaque valeur qui les composent.
Y-a-t-il une syntaxe qui permettrait de nommer les champs du hash ?
 
En vous remerciant par avance, pour votre aide.
 
PS: Il ne s'agit pas d'un sujet pour l'école, je ne suis plus étudiant. Je suis juste intéressé par le langage perl qui me permet d'automatiser des tâches répétitives et fastidieuses.


mood
Publicité
Posté le 18-12-2018 à 12:58:13  profilanswer
 

n°2326310
rat de com​bat
attention rongeur méchant!
Posté le 18-12-2018 à 13:47:25  profilanswer
 

Je crois que tu cherches le concept des références.

Code :
  1. use strict;
  2. use warnings;
  3.  
  4. my %hash;
  5.  
  6. my @array=(1,2,3);
  7. $hash{my_key}=[@array];
  8.  
  9. $hash{my_key}->[0]=42; #modifier une valeur
  10. $array[1]=43; #modifier une valeur dans le tableau d'origine ne change rien dans le hash car on a fait une copie dont on a pris la référence avec [@array]
  11.  
  12. print join(" ",@{$hash{my_key}}); #42, 2, 3


Ou si tu veux mettre un tableau contenant un autre tableau (ou précisément une référence vers un autre tableau) dans ta table de hashage:

Code :
  1. use strict;
  2. use warnings;
  3.  
  4. my %hash;
  5.  
  6. my $array_ref=[1,2,3]; #référence vers tableau anonyme
  7. my @array2=("aa", "bb", "cc" );
  8. $hash{my_key}=[@array2, $array_ref];
  9.  
  10. print $hash{my_key}->[0],"\n"; #aa
  11. $hash{my_key}->[3]->[0]=42;
  12. print $hash{my_key}->[3]->[0],"\n", #42
 

Les structures de données en Perl c'est un peu complexe quand on débute, je conseille un bon livre. Bon courage. ;)


Message édité par rat de combat le 18-12-2018 à 13:48:15
n°2326333
gilou
Modérateur
Modzilla
Posté le 18-12-2018 à 15:33:12  profilanswer
 

Bonjour,
> $Hash{MyInfoID_01} = [MyInfoTitle_01, @MyDList, @MyCList];
Il faudrait faire en fait
$Hash{MyInfoID_01} = [MyInfoTitle_01, \@MyDList, \@MyCList];
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --    In umbra igitur pugnabimus. --
n°2326334
rat de com​bat
attention rongeur méchant!
Posté le 18-12-2018 à 15:36:40  profilanswer
 

gilou a écrit :

Bonjour,Il faudrait faire en fait
$Hash{MyInfoID_01} = [MyInfoTitle_01, \@MyDList, \@MyCList];

Oui mais attention, si on modifie une valeur dans la structure de données on modifie le tableau et l'inverse. (ou je dis une bêtise? :o )


Message édité par rat de combat le 18-12-2018 à 15:36:50
n°2326337
gilou
Modérateur
Modzilla
Posté le 18-12-2018 à 15:45:11  profilanswer
 

Bien sur, mais c'est ce qu'il veut, non?
Si tu veux une vraie copie statique, tu fais
$Hash{MyInfoID_01} = [MyInfoTitle_01, [@MyDList], [@MyCList]];  
A+,
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --    In umbra igitur pugnabimus. --
n°2326344
rat de com​bat
attention rongeur méchant!
Posté le 18-12-2018 à 16:27:10  profilanswer
 

Le soucis c'est si on fait un truc du genre
faire(...)
    tableau=(rien)
    tableau=fonction_compliquée(paramètres)
    $hash{clé}=\@tableau
fin faire
 
on aura une mauvaise surprise à la fin, à savoir toutes les entrées qui contiennent les mêmes valeurs. Il faut passer par un tableau anonyme avec une référence dessus (comme tu l'expliques :jap: ). Ne me demande pas comment je sais ça. :o

n°2326351
gilou
Modérateur
Modzilla
Posté le 18-12-2018 à 16:51:46  profilanswer
 

Mais ça c'est normal, puisque tu n'as qu'une variable, nommée tableau, toujours la même, donc avec toujours la même adresse.
Donc faire $hash{clé}=\@tableau c'est donner la même valeur (l'adresse unique de @tableau) à toutes les clés.
alors que quand on fait $hash{clé}=[...] on crée automatiquement un nouveau tableau à chaque fois (d'ou l'intérêt de l'anonymat).
A+,

Message cité 1 fois
Message édité par gilou le 18-12-2018 à 16:52:25

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --    In umbra igitur pugnabimus. --
n°2326365
rat de com​bat
attention rongeur méchant!
Posté le 18-12-2018 à 17:26:38  profilanswer
 

Bien sûr, mais pour un débutant c'est un piège potentiel... :o

n°2326678
phdenis
Posté le 21-12-2018 à 00:33:30  profilanswer
 

Merci pour vos réponses, pour les livres si vous avez des références je suis preneur.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  Perl - Tableau associatif et liste

 

Sujets relatifs
[Python] Récupérer l'avant dernière chaine de caractère d'un tableauEcrire une variable tableau sur une feuille avec colonne masquéees
VBA organisation de tableau[PERL] expression réguliére RESOLU
copier tuple dans listetableau de classe dans une classe
Création d'une liste en SQL[Perl] Utiliser LibXML pour concatener plusieurs fichiers XML
Liste de record et lecture des valeurs[Perl] Optimisation code perl CGI - Problème de performance
Plus de sujets relatifs à : Perl - Tableau associatif et liste


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR