曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4320|回复: 0
打印 上一主题 下一主题

sort 函数, <=> 飞碟操作符, cmp 操作符

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2011-10-13 15:05:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
sort 函数可用来排序,它的一般用法形式如下:
[Perl] 纯文本查看 复制代码
my @result = sort by_number @some_numbers;


其中,by_number 是一个子函数,注意这里不要写上 & 符号,后面的 @some_numbers 是需要排序的数组。


排序一般有两种,一种是对数字排序,一种是对字符串排序(按 ASCII 码来排)。


在对数据排序的子程序里一般会用如下形式:
[Perl] 纯文本查看 复制代码
sub by_number { $a <=> $b }; 


其中 <=> 称为飞碟运算符(space ship),因为它看起来像一只飞碟。该操作符比较两个数字并且返回 -1, 0 或 1 。另外,$a 和 $b 是两个特殊的变量,无需进行更改。如果写成 $a <=> $b ,那么就是按照升序排列,反之写成 $b <=> $a 就变成了按照降序排列。

相对的,在比较字符串时,就会用到 cmp 这个操作符,和 <=> 类似,可以写成 $a cmp $b 或者 $b cmp $a 。

测试代码:
[Perl] 纯文本查看 复制代码
#!/usr/bin/perl

@list = ("www", "groad", "net", "mywenchang", "com");
print "Original list: @list\n";

sub ascii_sort {
        $a cmp $b;
}

@sorted_list = sort ascii_sort(@list);
print "ASCII sort: @sorted_list\n";

sub numeric_sort {
        $a <=> $b;
}



@number_sort = sort numeric_sort 18, 3, 5, 6.8, 10, 883;
print "Numeric sort: @number_sort.\n";


运行输出:
$ ./cmpnum.pl
Original list: www groad net mywenchang com
ASCII sort: com groad mywenchang net www
Numeric sort: 3 5 6.8 10 18 883.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-19 02:37 , Processed in 0.063483 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表