• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >perl > Perl基本数组排序方法介绍

Perl基本数组排序方法介绍

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了perl 数组排序,perl 数组引用 排序,perl中二维数组排序,perl 遍历数组,perl 定义数组等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文我们学习如何用Perl对字符串或者数字数组进行排序。

Perl有个内置函数叫做sort毫无疑问的可以排序一个数组。 其最简单的形式是传递一个数组,它会返回排序后的元素组成的数组。@sorted = sort @original。

基于ASCII码排序
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
 
use Data::Dumper qw(Dumper);
 
my @words = qw(foo bar zorg moo);
 
say Dumper \@words;
 
my @sorted_words = sort @words;
 
say Dumper \@sorted_words;
</div>
上边的例子将会打印
$VAR1 = [
        'foo',
        'bar',
        'zorg',
        'moo'
      ];
 
$VAR1 = [
        'bar',
        'foo',
        'moo',
        'zorg'
      ];
</div>
第一个输出显示了排序前的数组,第二个是排序后的。

这是最简单的情形,但是可能未必是你想要的。 比如,如果一些单词以大写字母开头怎么办?
my @words = qw(foo bar Zorg moo);
</div>
@sorted_names里的结果将是:
$VAR1 = [
        'Zorg',
        'bar',
        'foo',
        'moo'
      ];
</div>
你会发现,以大写字母开头的单词排在了第一位。 这是因为sort默认根据ASCII码表排序,所有的大写字母都排在小写字母前边。

比较函数

Perl的sort的工作方式是这样的,它遍历原始数组的每两个元素;每次把左边的值放入变量$a,把右边的值放入变量$b。 然后调用比较函数。如果$a的内容应该在左边的话,“比较函数”会返回1;如果$b应该在左边的话,返回-1,两者一样的话,返回0。

通常你看不到比较函数,sort会根据ASCII码表对值进行比较,不过如果你想的话,你可以显式的写出来:
sort { $a cmp $b } @words;
</div>
这段代码会跟没有使用块的sort @words达到同样的效果。

这里你可以看到,默认perl使用cmp作为比较函数。这是因为正是cmp可以做这里边我们需要的工作。 它比较两边的字符串的值,如果左边参数“小于”右边参数,就返回1;如果左边参数“大于”右边参数,就返回-1;如果相等,就返回0。

按字母顺序排列

如果你想忽略字符串的大小写来排序——即通常所谓的字母序,你可以像下一个例子这么做:
my @sorted_words = sort { lc($a) cmp lc($b) } @words;
</div>
这里为了比较,我们调用lc函数返回参数的小写版本。然后cmp比较这些小写版本并决定原始字符串谁先谁后。

结果是
$VAR1 = [
        'bar',
        'foo',
        'moo',
        'Zorg'
      ];
</div>

Perl对数值排序

如果对数值数组使用sort进行默认的排序,结果可能不是我们期望的。
my @numbers = (14, 3, 12, 2, 23);
my @sorted_numbers = sort @numbers;
say Dumper \@sorted_numbers;
$VAR1 = [
        12,
        14,
        2,
        23,
        3
      ];
</div>
仔细一想的话,这并不奇怪。比较函数看到12和3时,它按字符串进行比较。这意味着比较两个字符串的第一个字符"1"和"3"。 在ASCII码表里,"1"在"3"前边,因此字符串"12"会排在字符串"3"前面。

Perl不会很神奇地猜到你想按数字对这些值排序。

尽管我们可以写一个比较函数来按数字比较两个值。但这里我们使用<=>(也被称作宇宙飞船操作符), 它会按数字来比较两个参数并返回1、-1或者0。
my @sorted_numbers = sort { $a <=> $b } @numbers;
</div>
结果是:
$VAR1 = [
        2,
        3,
        12,
        14,
        23
      ];
</div>

</div>

您可能想查找下面的文章:

  • Perl基本数组排序方法介绍
  • 7个perl数组高级操作技巧分享
  • perl数组的多数字下标示例代码

相关文章

  • Perl语法中Perl运算符用法指南
  • Perl 哈希Hash用法之入门教程
  • Perl信号处理学习简单小结
  • perl操作符详细说明
  • perl中srand()与time的函数使用方法介绍
  • 求婚示爱的Perl代码之改写篇
  • perl 标量和运算符的一些知识介绍
  • perl常量、多维数组及变量的初始化的实例代码
  • Perl学习笔记之文件操作
  • perl中my和our的区别分析

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • perl处理xml的模块介绍
    • perl从文件中读取数据并输出的实现代码
    • Perl中的列表和数组学习笔记
    • Perl集群配置管理系统Rex简明手册
    • perl面向对象实例
    • 使用Perl创建指定编码格式(如utf-8)文件的实现代码
    • perl 列表和数组变量详解
    • 在Perl中使用Getopt::Long模块来接收用户命令行参数
    • perl 变量 $/ 的用法解析 上下文为行模式时,$/ 定义以什么来区分行
    • perl哈希hash的常见用法介绍

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有