高级排序
== Perl 的高级排序手段
语法:
my @sorted_array = sort sub_sort_method @original_array;
这里的 sub_sort_method 就是我们制定的排序策略,一般是一个sub routine 的名字,或者其代码。
示例:
my @result = sort by_number @some_numbers; # sub by_number {$a <=> $b}
my @result = sort { $a <=> $b} @some_numbers; # <=> 符号表示数字的比较和排序
my @descending = reverse sort { $a <=> $b} @some_numbers;
my @string = sort {$a cmp $b} @any_strings; # cmp 表示字符串的比较和排序
my @string = sort {"\L$a" cmp "\L$b"} @any_strings; # \L表示忽略大小写
Perl排序的理念是:你只要告诉他两个元素的比较关系(用-1,0,1表示),Perl就会为你完成任意长度的比较。
比如 {$a <=> $b} 其实表示的是
if ($a < $b) {-1} elsif ($a > $b) {1} else {0}
<=>符号只是一个缩写。Perl只要知道我们的sort类型,就会为任意多个元素完成排序。
== 根据value对hash表的key值进行排序
首先,要理解我们无法对hash表进行排序,不然就不叫hash了。
不过,根据hash表的value我们可以为相应的key实现排序。示例如下
sub by_score {$score{$b} <=> $score{$a}}; # $b在前面是因为我们要从大到小降序排列
my %score = ('barney" => 195, "fred" => 205, "dino" => 30);
my @ranking = sort by_score keys %score; # 注意要这样阅读 sort by_score (keys %score)
注意,by_score不是对key直接做比较,而是根据key比较value,然后反过来对key进行排序。通俗的例子就是张三和李四光凭名字无法排
序,但是根据名字,我们找到他们的考试成绩,然后反过来,对名字进行排序。这就是 {$score{$b} <=>
$score{$a}} 的工作。
== 二重排序与多重排序
前面的例子中,按照value进行了排名,但是如果value相同怎么办?如果我们希望对value相同的人按照字母顺序再细排,该怎么做呢?答案如下
sub by_score_and_name {
{$score{$b} <=> $score{$a}} # 按照value对key做降序排列
or
$a cmp $b # 按照字母顺序再排序
}
其实意思也很好理解。因为value相同,因此比较结果返回0,这个时候结果就由 or 的另一部分来决定了。
上面的例子是二重排序。同理可以推导多重排序的方法。
分享到:
相关推荐
以上只是Perl编程的一些基础和高级概念。在压缩包中,PDF文件可能涵盖了更多细节,包括更多实例、函数详解、正则表达式的复杂用法、模块的深入探讨等。通过学习这些资料,你可以逐步掌握Perl编程,从入门到精通。
7. **数据结构**:Perl可以方便地实现各种数据结构,如栈、队列、链表、树和图等,这些是高级算法的基石。 8. **排序算法**:Perl可以实现多种排序算法,如冒泡排序、插入排序、选择排序、快速排序、归并排序等,...
《高阶Perl编程》是一本深度剖析Perl高级特性的书籍,它不仅涵盖了理论知识,还提供了大量实用的编程技巧和示例代码。无论是对于初学者还是有经验的Perl程序员来说,这本书都是一本宝贵的资源。通过学习本书,读者...
高级排序 习题 第十五章智能匹配与given-when结构 智能匹配操作符 智能匹配操作的优先级 given语句 多个项目的when匹配 习题 第十六章进程管理 system函数 exec函数 环境变量 用反引号捕获输出结果 将...
##### 高级数据结构 - **链表**:包括单向链表和双向链表。单向链表只能从前向后遍历,而双向链表则支持双向遍历。 - **循环链表**:一种特殊的链表形式,最后一个节点指向头节点,形成一个闭环。 - **垃圾回收机制...
10. **CH17高级perl技巧**: 高级主题可能包括引用、闭包、对象导向编程、异常处理以及一些高级的数据结构和编程技巧。 通过这些章节的学习,初学者可以逐步掌握Perl语言的基础,并有能力解决实际问题。尽管书中可能...
Perl是一种高级、通用、解释型编程语言,适用于文本处理、系统管理、Web编程、网络编程等多种场合。它自1987年问世以来,以其强大的文本处理能力和跨平台特性,深受程序员们的喜爱。Perl语言的设计哲学是“用多种...
### Perl编程语言知识点详解 #### 一、引言 Perl是一种功能强大且灵活的脚本语言,被广泛应用于系统管理任务、...对于希望深入了解Perl的读者,建议查阅官方文档和相关的书籍资料,以便掌握更多高级技巧和最佳实践。
第一部分 Perl基础 第1学时 Perl入门 3 1.1 安装Perl 3 1.1.1 等一等,也许你已经安装了Perl 4 1.1.2 在Windows 95/98/NT上安装Perl 5 1.1.3 在UNIX上安装Perl 6 1.1.4 在Macintosh系统上安装Perl 7 1.2 文档资料 7 ...
此外,Perl还有许多高级特性,如匿名函数(lambda 或 sub {}),模块(Module)机制,对象导向编程等。Perl11.htm、perl13.htm等文件可能分别详细介绍了Perl语言的不同部分,例如Perl 11可能是关于文件和I/O的函数,...
在书中,作者们不仅介绍了Perl的基础知识,还探讨了高级特性和实用技巧。这本书涵盖了许多主题,旨在帮助读者解决实际编程中遇到的问题。例如: 1. **字符串操作**:字符串是Perl中最基本的数据类型之一。书中详细...
- **Perl语言**是一种高级编程语言,主要用于文本处理、系统管理任务以及快速原型开发等场景。 - **发明背景**:Larry Wall在1987年创建了Perl语言,初衷是为了改进shell脚本的能力,并增强其文本处理功能。 - **...
- **高级语言的强大能力:** Perl拥有类似于C语言的强大特性和灵活性。 - **无需编译:** Perl脚本不需要经过编译和链接过程即可直接运行,这极大地简化了开发流程,提高了效率。 - **灵活性高:** Perl能够轻松处理...
- Perl提供了丰富的列表处理功能,包括创建列表、访问列表元素、排序等。 **1.9 你不知道但不伤害你的东西(很多)** - 这一部分可能是指Perl中一些高级特性或者不常用的特性,虽然不了解它们不会对编程造成太大影响...