go ahead... be a heretic PerlMonks

### Sorting an array using multiple values?

by ultranerds (Friar)
 on Sep 08, 2011 at 16:53 UTC Need Help??
ultranerds has asked for the wisdom of the Perl Monks concerning the following question:

Hi,

I'm trying to sort an array, using "paid" listings first, and then "distance"... Here is what I've got to sort them by the distance:

my @loop_sorted = sort { \$a->{Distance} <=> \$b->{Distance} } @test;

An example of the @loop value would be:
```my @test;
push @test, { distance => "0.12", name => "Test1", isPaidLink => 0 };
push @test, { distance => "1.2", name => "Test1", isPaidLink => 1 };
push @test, { distance => "4", name => "Test1", isPaidLink => 1 };
push @test, { distance => "9.2", name => "Test1", isPaidLink => 0 };
push @test, { distance => "14", name => "Test1", isPaidLink => 1 };
my @loop_sorted = sort { \$a->{Distance} <=> \$b->{Distance} } @test;
Basically I need to sort them using : isPaidLink (1 first, then 0 after) ... and then numberically via the "distance" field)

I'm guessing this is possible, but I've never done it before so any pointers would be much appreciated :)

TIA

Andy

Replies are listed 'Best First'.
Re: Sorting an array using multiple values?
by AR (Friar) on Sep 08, 2011 at 17:04 UTC

Firstly, what you have written won't work because you use "distance" in your data structure and "Distance" in your comparison. That being said, here you go:

my @loop_sorted = sort { \$b->{isPaidLink} <=> \$a->{isPaidLink} || \$a->{distance} <=> \$b->{distance} } @test;
Hi,

Sorry, the "Distance" vs "distance" was a typo (I had a local test I played with, to get the values right - before using it on the live site , which used ->{Distance} and not ->{distance})

Your code worked a charm, thanks! I'll have to remember that for the future, as I'm sure I will need similar code at some point

Thanks again

Andy

Create A New User
Node Status?
node history
Node Type: perlquestion [id://924872]
Approved by ikegami
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (6)
As of 2018-01-20 15:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
How did you see in the new year?

Results (226 votes). Check out past polls.

Notices?