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.
In reply to Re: Sorting array with multiple values per keys
by kyle
in thread Sorting array with multiple values per keys
by cowgirl
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |