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 :

Convertir liste plate en hash spécifique


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut Convertir liste plate en hash spécifique
    Bonjour,

    Question bête :
    à partir d'une liste my @liste = qw / a b c d/;comment créer le hash suivant $hash->{a}{b}{c}{d} = undef;?

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    La liste peut être de taille quelconque.

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Ce n'est pas "strictement" ce que tu veux (le undef est remplacé par un hash vide) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $ perl -E 'my @liste = qw /a b c d/;my %hash;my $hash = \%hash;foreach my $level (@liste) { $hash->{$level} = {}; $hash = $hash->{$level} };use Data::Dumper; say Data::Dumper->Dump([\%hash],[qw(*hash)])'                                                             %hash = (
              'a' => {
                       'b' => {
                                'c' => {
                                         'd' => {}
                                       }
                              }
                     }
            );
    (normal que j'arrive plus à utiliser les boutons d'édition de message, par exemple pour la balise CODE ?)

  4. #4
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Hum, réponse pas très propre (et pas testée)...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    my @liste = qw / a b c d/;
    @liste = map { "{$_}"} @liste;
    my $string = join '', '$hash->', @liste, " = undef";
    eval $string;
    Bon, finalement, un petit test sous le debugger:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     x $hash
    0  HASH(0x8032f028)
       'a' => HASH(0x80431588)
          'b' => HASH(0x804315b8)
             'c' => HASH(0x804315e8)
                'd' => undef

  5. #5
    Membre chevronné Avatar de cmcmc
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 316
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Taisha:~/tttmp $ perl -MData::Dumper -e 'sub to_hash { my $c; $c = { $_ => $c } for reverse @_; $c }; print Dumper(to_hash(qw(a b c d)))'
    $VAR1 = {
              'a' => {
                       'b' => {
                                'c' => {
                                         'd' => undef
                                       }
                              }
                     }
            };
    Taisha:~/tttmp $

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Merci cmcmc

  7. #7
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Merci à vous trois.

    @philou, ce code peut toujours servir pour réutiliser ton code au niveau des sommaire en partant d'un hash !

  8. #8
    Membre chevronné Avatar de cmcmc
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 316
    Par défaut
    Citation Envoyé par cmcmc Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Taisha:~/tttmp $ perl -MData::Dumper -e 'sub to_hash { my $c; $c = { $_ => $c } for reverse @_; $c }; print Dumper(to_hash(qw(a b c d)))'
    $VAR1 = {
              'a' => {
                       'b' => {
                                'c' => {
                                         'd' => undef
                                       }
                              }
                     }
            };
    Taisha:~/tttmp $
    variante sans reverse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Taisha:~/tttmp $ perl -MData::Dumper -e 'sub to_hash { my $c = undef; $c = { pop @_ => $c } while @_; $c } print Dumper(to_hash(qw(a b c d)))'
    $VAR1 = {
              'a' => {
                       'b' => {
                                'c' => {
                                         'd' => undef
                                       }
                              }
                     }
            };
    Taisha:~/tttmp $
    variante récursive (ma préférée )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Taisha:~/tttmp $ perl -MData::Dumper -E 'sub to_hash { @_ ? { shift(@_) => to_hash(@_) } : undef } say Dumper(to_hash(qw(a b c d)))'
    $VAR1 = {
              'a' => {
                       'b' => {
                                'c' => {
                                         'd' => undef
                                       }
                              }
                     }
            };
    
    Taisha:~/tttmp $

  9. #9
    Membre chevronné Avatar de cmcmc
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 316
    Par défaut
    j'ai changé d'avis , je préfère celle là (récursive aussi) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Taisha:~/tttmp $ perl -MData::Dumper -E 'sub to_hash { $_[0] && { shift(@_) => to_hash(@_) } } say Dumper(to_hash(qw(a b c d)))'
    $VAR1 = {
              'a' => {
                       'b' => {
                                'c' => {
                                         'd' => undef
                                       }
                              }
                     }
            };
    
    Taisha:~/tttmp $
    Mais attention, elle ne supporte pas 0 comme clé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Taisha:~/tttmp $ perl -MData::Dumper -E 'sub to_hash { $_[0] && { shift(@_) => to_hash(@_) } } say Dumper(to_hash(qw(a 0 c d)))'
    $VAR1 = {
              'a' => '0'
            };
     
    Taisha:~/tttmp $
    en fait la version suivante serait plus robuste mais malheureusement la feuille produite contient 0 et non undef...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Taisha:~/tttmp $ perl -MData::Dumper -E 'sub to_hash { @_ && { shift(@_) => to_hash(@_) } } say Dumper(to_hash(qw(a 0 c d)))'  C-c C-z
    $VAR1 = {
              'a' => {
                       '0' => {
                                'c' => {
                                         'd' => 0
                                       }
                              }
                     }
            };
     
    Taisha:~/tttmp $

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

Discussions similaires

  1. Convertir List en Vector
    Par michaelbob dans le forum Collection et Stream
    Réponses: 12
    Dernier message: 10/05/2011, 16h25
  2. Réponses: 1
    Dernier message: 15/01/2010, 16h20
  3. Convertir List<MonObjet> en List<Objet>
    Par Arthis dans le forum C#
    Réponses: 2
    Dernier message: 05/12/2008, 14h48
  4. Listes liées avec rechargement spécifique
    Par jpascal dans le forum Langage
    Réponses: 2
    Dernier message: 05/04/2008, 02h32
  5. [XStream] convertir liste de javabean en xml
    Par jeb001 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 04/01/2008, 09h19

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