Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re: Sorting an array of hashes

by oko1 (Deacon)
on Mar 26, 2008 at 16:46 UTC ( #676455=note: print w/replies, xml ) Need Help??


in reply to Sorting an array of hashes

++ on '-w', of course. You could make the sorting happen more-or-less the way you were thinking about it - but it would be fragile, to say the least:

#!/usr/bin/perl -w use strict; my @AoH = ( {a => 1, b => 2, c => 3}, {a => 1, b => 2}, {a => 1, b => 2, c => 3, d => 4}, {a => 1} ); sub mysort { # Awful abuse of Perl, here... (my $A = %$a) =~ s#/.*##; (my $B = %$b) =~ s#/.*##; $B <=> $A; } my $count = 0; print join("\t", $count++, keys %$_), "\n" for sort mysort @AoH;
Here's something that's a bit cleaner - at least to my mind - and certainly more robust:
#!/usr/bin/perl -w use strict; my @AoH = ( {a => 1, b => 2, c => 3}, {a => 1, b => 2}, {a => 1, b => 2, c => 3, d => 4}, {a => 1} ); my $count = 0; print join("\t", $count++, keys(%{$AoH[$_]})), "\n" for sort { keys(%{$AoH[$b]}) <=> keys(%{$AoH[$a]}) } 0 .. $#AoH;

Update: Removed the unnecessary 'scalar' from the 'my $A = scalar %$a' in the first code example.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://676455]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (3)
As of 2020-08-13 21:21 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Which rocket would you take to Mars?










    Results (75 votes). Check out past polls.

    Notices?