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

Programmation et administration système Perl Discussion :

creation récursive d'un hash


Sujet :

Programmation et administration système Perl

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 31
    Points : 50
    Points
    50
    Par défaut creation récursive d'un hash
    Bonjour je travail actuellement sur un outil dont j'ai besoin pour configurer des vues sous Clearcase et pour cela j'ai besoin de générer un hash contenant l'arborescence de mes modules et sous modules.

    En gros pour faire simple, j'aurais besoin de passer une liste à ma fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my @list = ("a/b/c","a/b/d")
    et de récupérer en résultat un hash de la forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $hash = {
                     a => {
                                  b => {
                                               c => {},
                                               d => {}
                                  }
                     }
    }
    J'ai essayé de faire une telle fonction mais mon hash ne contient seulement la structure du dernier élément de la liste.

    Voici ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    sub setHash{
    	my $listModule = shift;
    	my $tree = {};
     
    	my @listArr = split("/",$listModule);
    	while(scalar(@listArr)>0){
    		my $elem = shift(@listArr);
    		$tree->{$elem} = setHash(join('/',@listArr));
    		return $tree;
    	}
    	return $tree;
    }
    Si par hasard quelqu'un aurait une idée ça serait super.

  2. #2
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    miam du récursif

    Voilà une solution possible.

    Différence avec ton script:
    - passage de l'arbre 'parent' où doit s'enregistrer le module, ce qui permet la récursion
    - le parcours de la liste est en dehors de la boucle de récursion, vu que le même traitement est effectué sur chaque élément de cette liste

    si tu as des questions...
    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
    sub setHash{
    	my $listModule = shift;
    	my $tree = shift;
     
    	# get the module
    	my @listArr = split("/",$listModule);
    	my $elem = shift(@listArr);
     
    	# initialize the tree if not created
    	if (!defined $tree->{$elem}){
    		$tree->{$elem} = {};
    	}
    	if (scalar @listArr){
    		setHash(join('/',@listArr), $tree->{$elem});
    	}
    	return $tree;
    }
     
     
    my @list = ("a/b/c","a/b/d");
    my %all_trees;
    foreach my $module (@list){
    	setHash($module, \%all_trees);
    }
    print Dumper %all_trees;
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 31
    Points : 50
    Points
    50
    Par défaut
    Je te remercie, c'est exactement ce que je recherchais.

    J'ai trouvé une solution mais elle est plus complexe. La tienne me semble plus simple à comprendre et elle est certainement plus rapide à exécuter.

    Merci beaucoup

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

Discussions similaires

  1. [VB6] Création de composant
    Par Tchetch dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/10/2002, 14h52
  2. [c++ builder] creation de surface sur TPanel
    Par JEG dans le forum DirectX
    Réponses: 7
    Dernier message: 23/09/2002, 22h41
  3. [Kylix] SIGSEGV 11 - creation form
    Par pram dans le forum EDI
    Réponses: 1
    Dernier message: 29/08/2002, 15h24
  4. Creation de fiche dynamique
    Par Mouss26 dans le forum C++Builder
    Réponses: 7
    Dernier message: 24/07/2002, 07h56
  5. Creation d une clee dans la registry en VC++
    Par rico27fr dans le forum MFC
    Réponses: 4
    Dernier message: 30/05/2002, 12h36

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