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

Re: How to sort output?

by quester (Vicar)
on Jul 22, 2007 at 07:00 UTC ( #628089=note: print w/replies, xml ) Need Help??

in reply to How to sort output?

Try replacing your calculation of @sorted with a Schwartzian Transform, something like this:
my @sorted= map { $_->[0] } sort { $a->[1] cmp $b->[1] } map { [$_, ( / (\d*\.\d*) ms/ and $1 or 0 ) ] } @data;
The part of the "expensive function" in merlyn's note is played by
/ (\d*\.\d*) ms/ and $1 or 0
which just returns the first (and in this case only) thing that looks like a ping time in the current string. (Update: I should mention the "or 0" is to make sure any lines with no valid ping time sort to the bottom.)

IMPORTANT NOTE: GrandFather++ is right about my absent-mindedly using "cmp" instead of "<=>". It should have been

my @sorted= map { $_->[0] } sort { $a->[1] <=> $b->[1] } map { [$_, ( / (\d*\.\d*) ms/ and $1 or 0 ) ] } @data;

Replies are listed 'Best First'.
Re^2: How to sort output?
by GrandFather (Sage) on Jul 22, 2007 at 07:05 UTC

    It's a numeric sort so the spaceship (<=>) is appropriate rather than the string cmp operator. Consider how '2', '100' and '11' sort for example.

    DWIM is Perl's answer to Gödel
      Thanks, I've put that into play (with the suggested <=> replacement), and it seems to be working great!

      Thanks to everybody who responded!


Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://628089]
[ambrus]: Corion: actually, schmorp has complained about how you used that syntax in the draft for AnyEvent::Impl:: Prima. I don't think he screamed, but whatever.
[ambrus]: Yes, I know you fixed that since.

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (8)
As of 2017-02-27 14:52 GMT
Find Nodes?
    Voting Booth?
    Before electricity was invented, what was the Electric Eel called?

    Results (388 votes). Check out past polls.