Perl基本数组排序方法介绍

   本文我们学习如何用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;

  上边的例子将会打印

   代码如下:

  $VAR1 = [

  'foo',

  'bar',

  'zorg',

  'moo'

  ];

  $VAR1 = [

  'bar',

  'foo',

  'moo',

  'zorg'

  ];

  第一个输出显示了排序前的数组,第二个是排序后的。

  这是最简单的情形,但是可能未必是你想要的。 比如,如果一些单词以大写字母开头怎么办?

   代码如下:

  my @words = qw(foo bar Zorg moo);

  @sorted_names里的结果将是:

   代码如下:

  $VAR1 = [

  'Zorg',

  'bar',

  'foo',

  'moo'

  ];

  你会发现,以大写字母开头的单词排在了第一位。 这是因为sort默认根据ASCII码表排序,所有的大写字母都排在小写字母前边。

  比较函数

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

  通常你看不到比较函数,sort会根据ASCII码表对值进行比较,不过如果你想的话,你可以显式的写出来:

   代码如下:

  sort { $a cmp $b } @words;

  这段代码会跟没有使用块的sort @words达到同样的效果。

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

  按字母顺序排列

  如果你想忽略字符串的大小写来排序——即通常所谓的字母序,你可以像下一个例子这么做:

   代码如下:

  my @sorted_words = sort { lc($a) cmp lc($b) } @words;

  这里为了比较,我们调用lc函数返回参数的小写版本。然后cmp比较这些小写版本并决定原始字符串谁先谁后。

  结果是

   代码如下:

  $VAR1 = [

  'bar',

  'foo',

  'moo',

  'Zorg'

  ];

  Perl对数值排序

  如果对数值数组使用sort进行默认的排序,结果可能不是我们期望的。

  代码如下:

  my @numbers = (14, 3, 12, 2, 23);

  my @sorted_numbers = sort @numbers;

  say Dumper @sorted_numbers;

  $VAR1 = [

  12,

  14,

  2,

  23,

  3

  ];

  仔细一想的话,这并不奇怪。比较函数看到12和3时,它按字符串进行比较。这意味着比较两个字符串的第一个字符"1"和"3"。 在ASCII码表里,"1"在"3"前边,因此字符串"12"会排在字符串"3"前面。

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

  尽管我们可以写一个比较函数来按数字比较两个值。但这里我们使用<=>(也被称作宇宙飞船操作符), 它会按数字来比较两个参数并返回1、-1或者0。

   代码如下:

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

  结果是:

   代码如下:

  $VAR1 = [

  2,

  3,

  12,

  14,

  23

  ];

时间: 2024-11-01 04:53:42

Perl基本数组排序方法介绍的相关文章

Perl基本数组排序方法介绍_perl

本文我们学习如何用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 zo

Python模块搜索概念介绍及模块安装方法介绍

  这篇文章主要介绍了Python模块搜索概念介绍及模块安装方法介绍,本文详细讲解了import模块的运作原理,搜索路径的过程以及模块安装的多种方法,需要的朋友可以参考下 [import模块] 和C中的#include不同,Python中的import语句并不是简单的把一个文件插入另外一个文件. 导入其实是运行时的运算,程序第一次导入指定文件时,会执行以下步骤, 1. 找到模块文件 2. 编译成位码 3. 执行模块中的代码来创建所定义的模块 并生成.pyc字节码文件,这三个步骤只在程序执行时,模

JavaScript自定义数组排序方法

 这篇文章主要介绍了JavaScript自定义数组排序方法,实例分析了javascript自定义数组排序的原理与实现技巧,非常具有实用价值,需要的朋友可以参考下     本文实例讲述了JavaScript自定义数组排序方法.分享给大家供大家参考.具体分析如下: Array中有自带的排序功能,这个使用起来比较方便,我们有一点必须清楚,就是排序的依据,如果sort不传入参数的话,那就是按照字符编码(Unicode编码)的顺序排序. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14

JavaScript sort数组排序方法和自我实现排序方法小结_javascript技巧

 前言 针对一个数组进行排序,一个很常见的需求.尤其在后端.当然,前端也是有这个需求的. 当然,数组排序,是有现成的方法的.就是sort()方法. 我们先开看下这个. 标准答案,sort方法 var arr = [45,98,67,57,85,6,58,83,48,18]; console.log('原数组'); console.log(arr); console.log('sort方法从小到大排序'); console.log(arr.sort(function(a,b){return a-b

aspjpeg组件高级使用方法介绍

 aspjpeg是一款非常强大的图片处理组件,纯英文版本.不过早已经有免费版和破解版,但是对其进行详细与深入介绍的文章却是不多,即使有也只牵涉到图片缩略和图片水印.可能是因为纯英文的缘故.这里我就是针对这些问题谈谈aspjpeg的高级用法.这里的技术主要包括: 图片缩略 图片水印 安全码技术 图片切割 图片合并 数据库支持 更多不常用的方法介绍 以及相关的一些实用技术 aspjpeg唯一点不足的就是输出方式比较单一.在这里,我们主要谈将图片处理保存后再调用的这种输出方法.另外,本人比较懒,所以有

photoshop修补工具使用方法介绍

  photoshop修补工具使用方法介绍          1.Step01打开素材文件 单击"文件"|"打开"命令,打开素材文件,如下图所示. 2.Step02拖拽鼠标 选取修补工具,在工具属性栏上选中"源"单选按钮,将鼠标指针移至七星瓢虫处,按住鼠标左键,沿着七星瓢虫拖拽鼠标,如下图所示. 3.Step03创建选区 至起始点时,释放鼠标左键,即可创建选区,如下图所示. 4.Step04拖拽选区 将鼠标移至选区内,按住鼠标左键并向右上角拖拽,

充分发挥Node.js程序性能的一些方法介绍

  这篇文章主要介绍了充分发挥Node.js程序性能的一些方法介绍,Node.js是把JavaScript用于服务器端的框架,需要的朋友可以参考下 一个Node.JS 的进程只会运行在单个的物理核心上,就是因为这一点,在开发可扩展的服务器的时候就需要格外的注意. 因为有一系列稳定的API,加上原生扩展的开发来管理进程,所以有很多不同的方法来设计一个可以并行的Node.JS运用.在这篇博文里,我们就来比较下这些可能的架构. 这篇文章同时也介绍compute-cluster 模块:一个小型的Node

四种用PPT设计扁平化图标方法介绍

  四种用PPT设计扁平化图标方法介绍          详细内容请见下图中介绍的用PPT设计扁平化图标的四种方法:常规式.长投影.阴影式.渐变式. word教程 Excel教程 PowerPoint教程

android真机调试时无法显示logcat信息的解决方法介绍

以下是对android真机调试时无法显示logcat信息的解决方法进行了详细的分析介绍,需要的朋友可以过来参考下   android真机调试时无法显示logcat信息的解决方法介绍: window-->show view-->android->devices, 打开devices,点击右边的截屏图片的按钮.等到出现截图的时候,logcat就出来信息了!