Random_Walk has asked for the wisdom of the Perl Monks concerning the following question:
Fellow Monks, I seek your Perls of wisdom.
I have an array of arrays. the lower level arrays are records with values both numeric and alpha. I want to give the user the option to sort on any of these fields. I thought it would be nice to use a simple hash table referencing the record number to sort on and the comparator to use. I am having a problem using a variable containing comparator. Am I missing something or do I just need another approach?
my $sort = 'hours'; # really comes from a switch my %map = ( # sorting map hours => [0, \sub {<=>}], code => [1, \sub {cmp}], name => [2, \sub {cmp}], ); # example data my @records = ( [10, 'xyz232', 'secret project'], [ 5, 'foo123', 'world domination'], [ 7, 'bar666', 'have a beer'], ); for ( sort {$a->[$map{$sort}->[0]] $map{$sort}->[1] $b->[$map{$sort}->[ +0]]} @records ) { print join ", ", @$_; }
my %map = ( hours => sub {sort { $_[0] <=> $_[0] } };, number => sub {sort { $_[0] <=> $_[0] } };, name => sub {sort { $_[0] <=> $_[0] } };, task => sub {sort { $_[0] <=> $_[0] } };, );
Cheers,
R.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Comparing spaceships (cmp and <=> as options)
by choroba (Cardinal) on May 20, 2013 at 15:54 UTC | |
|
Re: Comparing spaceships (cmp and <=> as options)
by moritz (Cardinal) on May 20, 2013 at 15:41 UTC | |
|
Re: Comparing spaceships (cmp and <=> as options)
by tobyink (Canon) on May 20, 2013 at 16:50 UTC | |
|
Re: Comparing spaceships (cmp and <=> as options)
by LanX (Saint) on May 20, 2013 at 16:39 UTC | |
|
Re: Comparing spaceships (cmp and <=> as options)
by periapt (Hermit) on May 20, 2013 at 17:53 UTC |