开发者

Sort function in Perl

Consider:

use warnings;

my @a = (1, 11, 3, 5, 21, 9, 10);

my @b = sort @a;

print "@b";

Output: 1 10 11 21 3 5 9

Codepad link: http://codepad.org/Fvhcf3eP

I guess t开发者_如何学编程he sort function is not taking the array's elements as an integer. That is why the output is not:

1 3 5 9 10 11 21

Is it?

How can I get the above result as output?


The default implementation of Perl's sort function is to sort values as strings. To perform numerical sorting:

my @a = sort {$a <=> $b} @b;

The linked page shows other examples of how to sort case-insensitively, in reverse order (descending), and so on.

You can create explicit subroutines to prevent duplication:

sub byord { $a <=> $b };
...
@a = sort byord @b;

This is functionally equivalent to the first example using an anonymous subroutine.


You are correct. So just tell Perl to treat it as an integer like below.

File foop.pl

use warnings;

my @a = (1, 11, 3, 5, 21, 9, 10);

my @b = sort {$a <=> $b} @a;

print "@b";

Run

perl foop.pl
1 3 5 9 10 11 21


Provide a custom comparison function (comparing numerically):

sort {$a <=> $b} @array;


Here is a numerical sort:

@sorted = sort { $a <=> $b } @not_sorted   


@b = sort { $a <=> $b } @a;

Is numerical


Use the spaceship operator: sort { $a <=> $b } @a


Guessing is the wrong approach. If you don't understand sort, look it up: sort

my @b = sort{$a <=> $b} @a;
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜