Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re^2: Sorting records on a single field

by salva (Canon)
on Jan 21, 2010 at 10:40 UTC ( [id://818680]=note: print w/replies, xml ) Need Help??


in reply to Re: Sorting records on a single field
in thread Sorting records on a single field

You can get rid of the reverse operation just inverting the order of the comparison operands. In other words, instead of reverse sort { $a <=> $b } @data use sort { $b <=> $a } @data.

In OP case:

@SortedData = sort { (split (/:/, $b))[-1] <=> (split (/:/, $a))[-1] } + @Data;

Using reverse also makes the sort operation unstable (entries with equal sorting keys do not keep their relative positions after the sort operation).

Replies are listed 'Best First'.
Re^3: Sorting records on a single field
by Lain78 (Initiate) on Jan 21, 2010 at 11:07 UTC

    I see that switching the opereands is better but I don't catch what you mean with "equal sorting keys do not keep their relative positions after the sort operation"... probably I miss something. Could you explain deeply that point? Thanks.

      Sure! Let me do it with an example:
      my @data = qw(1a 1b 2a 2b); my @s1 = reverse sort { $a <=> $b } @data; my @s2 = sort { $b <=> $a } @data; print "@s1\n@s2\n";
      generates:
      2b 2a 1b 1a 2a 2b 1a 1b
      Note how in the second row, elements with the same sorting key (the numeric part) appear in the same order they had in @data while in the first row, corresponding to the reverse solution, they do not.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://818680]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others browsing the Monastery: (5)
As of 2024-04-23 20:25 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found