Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Sorting an array using multiple values?

by ultranerds (Pilgrim)
on Sep 08, 2011 at 16:53 UTC ( #924872=perlquestion: print w/ replies, xml ) 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

Comment on Sorting an array using multiple values?
Select or Download Code
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

Log In?
Username:
Password:

What's my password?
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 contemplating the Monastery: (14)
As of 2014-10-01 12:47 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    What is your favourite meta-syntactic variable name?














    Results (18 votes), past polls