[PERL] Trier un tableau a deux dimensions
Bonjour,
J'ai un tableau à deux dimensions comme ca :
Code:
1 2 3 4 5
|
$tab_logins{Piregwan} = 17;
$tab_logins{Nudrema} = 4;
$tab_logins{Sylozof} = 150;
$tab_logins{Gom} = 1; |
Je voudrais le trier sur les valeurs, pour qu'il soit dans cet ordre :
Code:
1 2 3 4 5
|
$tab_logins{Gom} = 1;
$tab_logins{Nudrema} = 4;
$tab_logins{Piregwan} = 17;
$tab_logins{Sylozof} = 150; |
Avez vous une idée ? Merci !
David
Re: [PERL] Trier un tableau a deux dimensions
Bonjour,
Citation:
Envoyé par piregwan
J'ai un
tableau à deux dimensions comme ca :
Code:
1 2 3 4 5
|
$tab_logins{Piregwan} = 17;
$tab_logins{Nudrema} = 4;
$tab_logins{Sylozof} = 150;
$tab_logins{Gom} = 1; |
Ce n'est pas un tableau, mais une table de hachage, ou liste hachée.
Les tableaux sont indicés par des nombres et l'indice s'y exprime entre crochets (et en plus, le sigill des tableaux est un @ alors que celui des hachages est un %) ;)
Une liste hachée n'a qu'une "dimension" ...
Par contre, c'est vrai qu'il y a deux "expressions" de son contenu : les valeurs et les clefs.
Citation:
Envoyé par piregwan
Je voudrais le trier sur les valeurs, pour qu'il soit dans cet ordre :
Code:
1 2 3 4 5
|
$tab_logins{Gom} = 1;
$tab_logins{Nudrema} = 4;
$tab_logins{Piregwan} = 17;
$tab_logins{Sylozof} = 150; |
On ne peut pas trier une liste hachée. C'est perl qui décide de l'ordre des valeurs en mémoire. Cet ordre est innaccessible au programmeur et permet au langage de retrouver efficacement les données.
Par contre, on peut quand même faire un affichage trié du contenu des valeurs.
Ce tri peut porter soit sur l'ordre des clefs, soit sur l'ordre des valeurs.
Pour faire ce tri, on trie les clefs de hachage selon notre critère, puis on affiche toutes les valeurs dans l'ordre de tri des clefs :
Code:
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
| #!/usr/bin/perl
use strict;
use warnings;
my %tab_logins;
$tab_logins{Piregwan} = 17;
$tab_logins{Nudrema} = 40;
$tab_logins{Sylozof} = 150;
$tab_logins{Gom} = 1;
my @ordre;
print "Ordre Arbitraire : ";
@ordre = keys (%tab_logins);
print $_."/".$tab_logins{$_}." " foreach (@ordre);
print "\n";
print "Ordre des clefs : ";
@ordre = sort keys (%tab_logins);
print $_."/".$tab_logins{$_}." " foreach (@ordre);
print "\n";
print "Ordre des valeurs : ";
@ordre = sort { $tab_logins{$a} <=> $tab_logins{$b} } keys (%tab_logins);
print $_."/".$tab_logins{$_}." " foreach (@ordre);
print "\n"; |