Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

Sorting an array using multiple values?

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


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 :)



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;

      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


Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://924872]
Approved by ikegami
[Corion]: ambrus: Yeah, I read that, but it's somewhat vague as in what I really have to implement, and where/how my "other" mainloop should/needs to call AnyEvent

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (4)
As of 2016-12-08 12:13 GMT
Find Nodes?
    Voting Booth?
    On a regular basis, I'm most likely to spy upon:

    Results (141 votes). Check out past polls.