1 2 3 4 5 6 7 8
my @unsorted = ( { 'ZLANED' => [ { 'CO' => 'AAA' }, { 'AT' => 'AA' } ] }, { 'E3000E' => [ { 'CO' => '123' }, { 'AT' => '00' } ] }, { 'IWWAST' => [ { 'CO' => 'ABC' }, { 'AT' => 'AA' } ] }, { 'UXWAGL' => [ { 'CO' => 'ABC' }, { 'AT' => 'EF' } ] }, { 'E3000E' => [ { 'CO' => '123' }, { 'AT' => 'CC' } ] }, { 'IWWAST' => [ { 'CO' => 'AAA' }, { 'AT' => 'AB' } ] }, );
1 2 3 4 5 6 7 8
my @sorted = ( { 'E3000E' => [ { 'CO' => '123' }, { 'AT' => '00' } ] }, { 'E3000E' => [ { 'CO' => '123' }, { 'AT' => 'CC' } ] }, { 'IWWAST' => [ { 'CO' => 'ABC' }, { 'AT' => 'AA' } ] }, { 'IWWAST' => [ { 'CO' => 'AAA' }, { 'AT' => 'AB' } ] }, { 'UXWAGL' => [ { 'CO' => 'ABC' }, { 'AT' => 'EF' } ] }, { 'ZLANED' => [ { 'CO' => 'AAA' }, { 'AT' => 'AA' } ] }, );
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#! /usr/bin/env perl use strict; use warnings; my @unsorted = ( { 'ZLANED' => [ { 'CO' => 'AAA' }, { 'AT' => 'AA' } ] }, { 'E3000E' => [ { 'CO' => '123' }, { 'AT' => '00' } ] }, { 'IWWAST' => [ { 'CO' => 'ABC' }, { 'AT' => 'AA' } ] }, { 'UXWAGL' => [ { 'CO' => 'ABC' }, { 'AT' => 'EF' } ] }, { 'E3000E' => [ { 'CO' => '123' }, { 'AT' => 'CC' } ] }, { 'IWWAST' => [ { 'CO' => 'AAA' }, { 'AT' => 'AB' } ] }, ); # Keyword: Schwartzian Transform my @sorted = map { $_->[0] } sort { $a->[1] cmp $b->[1] } map { [ $_, keys %$_ ] } @unsorted; require Data::Dumper; print Data::Dumper->new( [ \@sorted ], [ 'sorted' ] )->Maxdepth(2)->Dump();
1
2
3
4
5
my @sorted =
map { $_->[0] }
sort { $a->[1] cmp $b->[1] }
map { [ $_, keys %$_ ] }
@unsorted;
1
2
3
4
5
perl /tmp/x.pl
Testing with 704 values.
Rate ST direct
ST 568/s -- -100%
direct 4273666/s 752122% --
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
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @array = ( { 'ccc' => [ {'c' => 'c1'}, {'c' => 'c2'}, {'xx' => 'c3'} ] }, { 'aaa' => [ {'a' => 'a1'}, {'a' => 'a2'}, {'xx' => 'a3'} ] }, { 'bbb' => [ {'b' => 'b1'}, {'b' => 'b2'}, {'xx' => 'b3'} ] }, ); my @temp = map { $_->[0] } sort { $a->[1] cmp $b->[1] } map { [ $_, find_val($_) ] } @array; sub find_val { for my $ref ($_) { for my $element (keys %$ref) { return $ref->{$element}->[2]->{'xx'}; } } } print Dumper(@temp);