Perl 的排序问题
来源:互联网 发布:php好玩的小例子 编辑:程序博客网 时间:2024/06/05 18:14
Perl自带有排序函数sort,sort的用法主要有两种:
1. 直接使用
@articles = sort @files;
上述例子中,sort将依据标准的字符串排序法则对数组files里包含的元素进行排序。也就是说数组里定义的数字或者字母将被转换成ASCII码后进行排序。
2.自定义排序法则
@articles = sort {sub rule} @files;
上述例子中的"sub rule"指的是自定义排序法则的子程序(subroutine)。
在介绍自定义排序法则的子程序之前,让我们先来看看perl里的比较符(comparison operators)
- 数字比较符: <, >, <=, >=, ==, <=>
- 字符串比较符:lt, gt, le, gr, eq, cmp
前面几个很容易懂,最后一个"<=>"或者"cmp"是用来比较两个数字或者字符串之间的关系。
$a 和 $b 之间的关系$a <=> $b 的返回值$a 大于$b1$a 等于$b0$a 小于$b-1因此,常用的自定义排序法则的子程序可以这样写:
#数字比较
@sorted = sort { $a <=> $b } @not_sorted
#字母比较1
@sorted = sort { $a cmp $b } @not_sorted
#字母比较2, 先转换成小写比较
@sorted = sort { lc($a) cmp lc($b) } @not_sorted
这里的$a 和$b其实是perl固有的全局变量(build-in/package globals) , 我们把自定义排序法则的子程序写成: {$a <=>$b} ,perl编译器将得知你定义了的排序法则是采用数字比较大小。我们在对hash按key进行排序时候常用到自定义排序法。例如:
foreach(sort{$mapword{$b}<=>$mapword{$a}}keys %mapword){
print "$_$mapword{$_}\n";
}
#1. 'keys % mapword' 得到的是一个数组
#2. 用全局变量,$a, $b定义了对比法则,将对%mapword的key数值按从小到大顺序排列
#3. 打印出$key值和对应的hash值
既然是自定义法则,你还可以把比较法则定义成你自己想要的,比如说,你要把一组数安字母顺序排列,但是你要让dh永远排在前面,你可以这么写:
@words = ("hi", "da", "abc", "dh", "man");
@sorted = sort {
if ($a eq 'dh') { return -1; }
elsif ($b eq 'dh') { return 1; }
else { return $a cmp $b; }
} @words;
print @sorted;
#打印结果为:dhabcdahiman
0 0
- Perl 的排序问题
- Perl 的排序问题
- perl高级排序中遇到的一个问题
- perl输入,排序,输出,一行代码解决所有的问题
- perl的一点问题
- perl实现的插入排序
- perl的排序和比较
- Perl写的快速排序
- 关于perl hash输出排序问题
- Perl 排序
- perl 排序
- perl传递数组的问题
- perl 实现的基本排序算法
- PERL算法-加入子程序的堆排序
- 初学Perl 用Perl解决了自己的小问题
- Perl 问题
- perl 遇到的贪婪匹配的问题
- perl中汉语匹配的问题
- Maven—Windows操作系统中安装配置Maven环境
- 新技能上Google
- ThreadPool线程池
- myeclipse去掉js验证方法
- 黑马程序员_Foundation框架
- Perl 的排序问题
- 字符串处理笔记-获得字符串长度
- xaml初学(数据绑定)
- 04js基础 内置对象 DOM与BOM
- C# 运用Jquery和Div实现Loading加载提示效果
- 1023. Have Fun with Numbers
- struts2 常用标签
- 如何理解指向指针的指针?
- java web根据访问的ip地址获取MAC地址