IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Hachage de tableaux de tableaux


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 4
    Par défaut Hachage de tableaux de tableaux
    Bonjour,
    Je souhaite creer une reference du type hachage de tableaux de tableaux.
    Hachage principal : %proteines avec clé = un numéro, valeur = un tableau (@toutes_predictions) contenant des references vers d'autres tableaux (@pred1..) ou vers un hachage (%pred3 par exemple).
    Je remplirais à partir d'un fichier lu ligne a ligne mais comment je fais pour recuperer par exemple pour la proteine 1422 la valeur 0,94 ($pred1[3] ????
    Je suis perdue dans les dereferencements .... et pourtant j'ai lu plusieurs dics ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    # TABLEAUX DES PREDICTIONS
     
    my @pred1 =  qw /20 50 29 0.94/;
    my @pred2 = qw /152 199 121 1.00/;
    # Referencer les tableaux des diff predictions
    my $refpred1= \@pred1;
    my $refpred2 = \@pred2;
     
     
    # HACH DES PREDICTIONS
     
    my %pred3 = (
    			 "deb" => 95,
    			 "fin" => 158,
    			 "nb" => 63,
    			 "proba" => 0.98
    			 );
     
    my %pred4 = (
    			 "deb" => 258,
    			 "fin" => 361,
    			 "nb" => 103,
    			 "proba" => 1.00
    			 );
    # Referencer les hach
    my $refpred3 =\%pred3;
    my $refpred4 =\%pred4;
     
     
    # TABLEAUX DES TABLEAUX DES PREDICTIONS
     
    my @toutes_predictions1 = qw /$refpred1 $refpred2/;
    my @toutes_predictions2 = qw /$refpred3 $refpred4/;
     
     
    # Referencer les tableaux predictions
    my $reftab_toutes_predictions1 = \@toutes_predictions1;
    my $reftab_toutes_predictions2 = \@toutes_predictions2;
     
    # HACH PRINCIPAL
     
    my %proteines = (1422 => $reftab_toutes_predictions1, 1233 => $reftab_toutes_predictions2);
     
    print "$proteines{1422}\n";  #  ref du tableau
    print "$proteines{1233}[0]\n"; # $refpred1
    Voila , je voudrais continuer a derouler $proteines{1422} ...@toutes_predictions1[0] ...@pred1[3] par exemple

    Si vous pouviez m'aider ....
    Je galere depuis 2 jours !

  2. #2
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Quand un tableau peut contenir à la fois des références de tableaux et des références de hash, c'est souvent qu'il y a un problème à la conception...
    Par ailleurs qw/ / crée une liste de chaînes de caractères, donc les deux lignes suivantes sont fausses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my @toutes_predictions1 = qw /$refpred1 $refpred2/;
    my @toutes_predictions2 = qw /$refpred3 $refpred4/;
    Tu voulais sans doute écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my @toutes_predictions1 = ($refpred1, $refpred2);
    my @toutes_predictions2 = ($refpred3 $refpred4);
    Remarque que c'est une étape quelque peu inutile, tu aurais pu écrire directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    my %proteines = (
      1422 => [ $refpred1, $refpred2 ], 
      1233 => [ $refpred3 $refpred4 ],
    );
    D'un côté ça aide peut-être à la compréhension du code, de l'autre je pense que rajouter un ou deux commentaires pour compenser la suppression de code serait plus clair.

    Je pense par ailleurs que cela rend plus clair la façon d'accéder à $pred1[3] :
    --
    Jedaï

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 4
    Par défaut
    Bonjour,
    En fait le tableau ne va pas contenir a la fois des references de tableaux et de hachages, c'etait pour tester les 2.
    Et donc si je choisis la version hachage, je recupere ma valeur "debut" comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $proteines{1233}[0]{deb}
    Et j'avais tout faux sur le qw des references !
    Je trouve ca assez complique ces structures imbriquees et merci beaucoup pour ton aide
    Bonne journée !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tableaux] 3 tableaux à la place de 2
    Par lodan dans le forum Langage
    Réponses: 11
    Dernier message: 13/08/2006, 19h41
  2. [Tableaux] Les tableaux multi-dimensionnels
    Par ludovik dans le forum Langage
    Réponses: 2
    Dernier message: 23/05/2006, 12h21
  3. Manipulation de tableaux de tableaux
    Par vargasvan dans le forum Langage
    Réponses: 2
    Dernier message: 26/04/2006, 13h54
  4. tableaux C/tableaux fortran
    Par pascale_92 dans le forum C
    Réponses: 5
    Dernier message: 05/04/2006, 12h22
  5. [Tableaux] les tableaux
    Par jeanfrancois dans le forum Langage
    Réponses: 2
    Dernier message: 03/03/2006, 11h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo