XP is just a number PerlMonks

### Sorting an array using multiple values?

by ultranerds (Hermit)
 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 the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (7)
As of 2021-04-13 18:50 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?

No recent polls found

Notices?