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 :

Trie table de hash


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 90
    Par défaut Trie table de hash
    Bonjour,

    Actuellement, je trie ma table de hash par clé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    my @keys = sort{$a cmp $b} keys %h;
    foreach my $key (@keys)
    {
        $value = $h{$key};
     
        #instructions
        #...
     
        print FILE "$key $d";
    }
    Résultat :
    J'aimerai maintenant les trier par valeur :
    Comment cela est-il possible ?

    Merci d'avance.

  2. #2
    Membre expérimenté Avatar de brice45
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 188
    Par défaut
    Bonsoir,

    Voici comment tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach my $value (sort values %hash) {
    print "$value \n";
    }
    Pour avoir un tri correct avant passe toutes tes valeurs sur 3 chiffres.
    Ex : 005 pour 5
    Pour cela, utilise sprintf


  3. #3
    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
    Citation Envoyé par brice45 Voir le message
    Pour avoir un tri correct avant passe toutes tes valeurs sur 3 chiffres.
    Ex : 005 pour 5
    Pour cela, utilise sprintf

    Ou, mieux, utilise l'opérateur "spaceship" (l'opérateur <=> que j'ai utilisé ci-dessus) qui fera un tri numérique.

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 90
    Par défaut
    Merci mais ma situation est devenu un peu plus "complexe".

    J'ai 2 tables de hachages :

    h1 :
    h2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    u1 15
    u2 18
    u3 11
    ...
    et j'aimerai afficher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    u3 2 11
    u1 0 15
    u2 1 18
    ...
    c'est a dire, un tri selon les valeurs de h2.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    my @values = sort {$a <=> $b} values %h2;
    foreach my $val_h2 (@values) {
    # my $key = ?;
    #my $val_h1 = ?;
    print "$key,$val_h1,$val_h2\n";
    }
    Merci d'avance.

  5. #5
    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
    Il suffit de trier les clés selon les valeurs associées du hash selon lequel du veux trier, puis d'imprimer les valeurs des deux hashs pour ces clés.

    Exemple de tri des clés selon les valeurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my %h = (jan => 1, dec =>12, fev =>2, avr =>4, mar =>3);
    print "$_\n" foreach  sort {$h{$a} <=> $h{$b} } keys %h;
    Ce qui imprime:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    jan
    fev
    mar
    avr
    dec

  6. #6
    Membre expérimenté Avatar de brice45
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 188
    Par défaut
    Merci pour l'opérateur "spaceship"
    Ou, mieux, utilise l'opérateur "spaceship" (l'opérateur <=> que j'ai utilisé ci-dessus) qui fera un tri numérique.

  7. #7
    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
    Tu remplaces la fonction keys par la fonction values.

    example:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my %h = (jan => 1, dec =>12, fev =>2, avr =>4, mar =>3);
    my @v = sort ($a <=> $b)  values %h;
    @v contient maintenant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    0  1
    1  2
    2  3
    3  4
    4  12
    EDIT: grillé par Brice.

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

Discussions similaires

  1. Table de hash limité ??
    Par elbrujo2323 dans le forum Langage
    Réponses: 14
    Dernier message: 17/01/2008, 21h32
  2. table de hash
    Par Ganondorf dans le forum Langage
    Réponses: 21
    Dernier message: 01/10/2007, 21h36
  3. Table de hash et package.
    Par Marty000 dans le forum Langage
    Réponses: 2
    Dernier message: 25/01/2007, 09h52
  4. Trie d'un hash par rapport a un autre
    Par vodevil dans le forum Modules
    Réponses: 6
    Dernier message: 18/03/2006, 11h05
  5. Tables de hash
    Par miss8 dans le forum C
    Réponses: 2
    Dernier message: 16/11/2002, 17h44

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