use strict; use warnings; use Data::Dumper; my $raUserOrder = [ 5, 1, 4, 3, 2 ]; my %sortOrder = do { my $count = 0; map { $_ => ++ $count } @$raUserOrder; }; my $raQueryResults = [ { key => 4, name => q{label4} }, { key => 2, name => q{label2} }, { key => 5, name => q{label5} }, { key => 1, name => q{label1} }, { key => 3, name => q{label3} }, ]; my $raSortedQueries = [ map { $_->[0] } sort { $sortOrder{$a->[1]} <=> $sortOrder{$b->[1]} } map { [ $_, $_->{key} ] } @$raQueryResults ]; print Data::Dumper->Dumpxs( [ \%sortOrder, $raSortedQueries ], [ qw{ *sortOrder raSortedQueries } ] );
Here's the output.
%sortOrder = ( '4' => 3, '1' => 2, '3' => 4, '2' => 5, '5' => 1 ); $raSortedQueries = [ { 'name' => 'label5', 'key' => 5 }, { 'name' => 'label1', 'key' => 1 }, { 'name' => 'label4', 'key' => 4 }, { 'name' => 'label3', 'key' => 3 }, { 'name' => 'label2', 'key' => 2 } ];
I hope this is of interest.
Cheers,
JohnGG
Update: Corrected typo.
In reply to Re: Sort AoH by another array
by johngg
in thread Sort AoH by another array
by saberworks
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |