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 :

problème de tri dans un Hash


Sujet :

Langage Perl

  1. #1
    Candidat au Club
    Femme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 5
    Points : 2
    Points
    2
    Par défaut problème de tri dans un Hash
    Bonsoir
    j'ai un hash "classique" %groupe qui contient comme clé le nom des membres et comme valeur deux champs : un montant en euro (cotisation) et un tableau contenant des valeurs de versements, de taille quelconque.
    Pas de souci pour obtenir toutes les données triées sur le nom des membres.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foreach my $name (keys %groupe) {
        	print "<br />Les versements  de $name sont <br />"; 	
        	foreach my $i (0 .. $#{ $groupe{$name}{versement}}){
        		print "$groupe{$name}{versement}[$i], ";    	
        	}
        	print "Montant = $groupe{$name}{montant}<br />"; 
        }
    Mais je voudrais trier sur le montant des cotisations. Je sèche...
    Quelqu'un aurait il une idée ?
    Merci par avance

  2. #2
    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
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Dans le code que tu montres (d'ailleurs, place entre des balises code, le bouton #, ce sera plus lisible), ti ne trie pas selon le nom. Il faudrait faire quelque chose comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    foreach my $name (sort keys %groupe) {
         # ...
    Je ne comprends pas bien ce que tu veux trier: les montants versés par les personnes individuelles, pour chaque personne, ou les personnes selon les montants qu'elles ont versés?

    Si c'est trier les personnes en fonction des montants des cotisations, quelque chose comme cela (non testé, je n'ai pas Perl sur ma tablette):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my @sorted_persons = sort { $groupe{$a}{montant} <=> $groupe{$b}{montant} } keys %groupe;
    ou directement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for my $name ( sort { $groupe{$a}{montant} <=> $groupe{$b}{montant} } keys %groupe) {
        # ...

  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
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Bon, voilà j'ai testé maintenant à la ligne de commande:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $ perl -e '
    > use strict;
    > use warnings;
    >
    > my %groupe = ( Martin => { montant => 50}, Kevin => {montant => 75 }, Marie => {montant => 45});
    >
    > for my $name ( sort { $groupe{$a}{montant} <=> $groupe{$b}{montant} } keys %groupe) {
    >     print "$name : $groupe{$name}{montant} \n";
    > }
    > '
    Marie : 45
    Martin : 50
    Kevin : 75
    Pour un tri en ordre descendant, il suffit d'intervertir les variables spéciales $a et $b dans le bloc de code du sort:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $ perl -e '
    > use strict;
    > use warnings;
    >
    > my %groupe = ( Martin => { montant => 50}, Kevin => {montant => 75 }, Marie => {montant => 45});
    >
    > for my $name ( sort { $groupe{$b}{montant} <=> $groupe{$a}{montant} } keys %groupe) {
    >     print "$name : $groupe{$name}{montant} \n";
    > }
    > '
    Kevin : 75
    Martin : 50
    Marie : 45

  4. #4
    Candidat au Club
    Femme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci pour ces réponses.
    C'est la solution vers laquelle je m'étais tourné mais en échangeant (bêtement) $groupe{$a}{montant} avec $groupe{montant}{$a}
    Merci

Discussions similaires

  1. Problème de tri dans Datagridview
    Par chebmo90 dans le forum Windows Forms
    Réponses: 18
    Dernier message: 24/06/2009, 10h37
  2. Réponses: 4
    Dernier message: 05/11/2008, 21h17
  3. Problème de tri dans formulaire
    Par antoine1504 dans le forum IHM
    Réponses: 1
    Dernier message: 23/07/2007, 12h15
  4. Problème de tri dans ma page ASP.
    Par laurent_diep dans le forum ASP
    Réponses: 4
    Dernier message: 01/03/2007, 16h59
  5. Problème de tri dans excel
    Par fabou3377 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/10/2006, 06h20

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