Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Sorting an array using multiple values?

by ultranerds (Hermit)
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

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

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 cooling their heels in the Monastery: (3)
As of 2021-03-03 20:56 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    My favorite kind of desktop background is:











    Results (92 votes). Check out past polls.

    Notices?