in reply to Sorting array with multiple values per keys
use Data::Dumper; use List::Util 'shuffle'; # randomized list my @a1 = shuffle ( '1,5', '3,9', '3,4', '6,2', '8,1' ); # convert to an array of hashes my @a2 = map { s/,/,y,/; s/\A/x,/; +{ split /,/ } } @a1; # sort 'x' values ascending and 'y' values descending my @a3 = sort { $a->{x} <=> $b->{x} || $b->{y} <=> $a->{y} } @a2; print Dumper \@a3; __END__ $VAR1 = [ { 'y' => '5', 'x' => 1 }, { 'y' => 9, 'x' => 3 }, { 'y' => 4, 'x' => 3 }, { 'y' => '2', 'x' => 6 }, { 'y' => '1', 'x' => 8 } ];
To understand the array of hashes, see perlreftut. See the documentation for sort and perlop to understand the <=> stuff in there. Of course, it'd be good to know map, split, and the fact that a list can be turned into a hash and back just by pretending that's what it is. You'd also be doing yourself a favor to learn about Data::Dumper and List::Util if you don't know of them already. They're core modules and awesome.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Sorting array with multiple values per keys
by ikegami (Patriarch) on Aug 12, 2008 at 23:28 UTC | |
by betterworld (Curate) on Aug 12, 2008 at 23:58 UTC | |
by kyle (Abbot) on Aug 13, 2008 at 15:44 UTC | |
|
Re^2: Sorting array with multiple values per keys
by cowgirl (Acolyte) on Aug 13, 2008 at 01:10 UTC | |
by ikegami (Patriarch) on Aug 13, 2008 at 01:21 UTC | |
by betterworld (Curate) on Aug 13, 2008 at 01:41 UTC |