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-10-02 04:58:24

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

PERL脚本 学习笔记_基础教程

1. chomp无参数时,使用默认参数,将对$_操作. 2. 数组@array..可用$array[number]引用.$#array..表示数组中索引数. 3. $!包含出错信息: 4. 默认打开文件句柄的方式是"<"即输入,">>"和">"区别就在于一个添加方式操作文件的. if(@ARGV < 2){ die "Not enough arguments\n"; } 5. select LOG

Perl学习笔记之CPAN使用介绍

  这篇文章主要介绍了Perl学习笔记之CPAN使用介绍,本文讲解了什么是CPAN.CPAN的目录作用介绍.CPAN安装Perl Module的两种方法等内容,需要的朋友可以参考下 CPAN(Comprehensive Perl Archive Network:全面的Perl存档网络)是查找任何Perl有关的东西的中心仓库.它包含从整个Perl社区收集来的智慧:成百上千的 Perl模块和脚本,相当于好几本书的文档,以及整个Perl发布.如果有东西是用Perl写的,而且这个东西很有用而且是自由的,

Perl学习笔记之文件操作

         这篇文章主要介绍了Perl学习笔记之文件操作,本文分别给出了打开文件.读取文件.写入文件代码实例,需要的朋友可以参考下              Perl对文件的操作,跟其它的语言类似,无非也就是打开,读与写的操作. 1. 打开文件 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #! c:/perl/bin/perl -w use utf8; use strict; use warnings;   my $filename = 'test.txt'

PHP学习笔记 (1) 环境配置与代码调试

一配置PHP环境 1.了解什么是PHP PHP("PHP: Hypertext Preprocessor",超文本预处理器的字母缩写) PHP,是英文超级文本预处理语言Hypertext Preprocessor的缩写.PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,被广泛的运用 2.PHP的背景和优势 PHP的发展背景 1).1994年由Rasmus Lerdorf创建,开始是一个简单的Perl语言编写的程序,用统计

MySQL数据库学习笔记(一)

mysql|笔记|数据|数据库         我一直从事Informix和Oracle数据库开发,有一天发现网络上有一种小巧别致的数据库,被广泛使用,从MySQL的网站http://www.mysql.com/我下载了它的数据库软件,使用过后觉得真的挺好,这是我的一点学习笔记希望对各位初学者有点帮助. 1.       MySQL数据库介绍 MySQL 是瑞典的MySQL AB公司开发的一个可用于各种流行操作系统平台的关系数据库系统,它具有客户机/服务器体系结构的分布式数据库管理系统.MySQ

Bash学习笔记

                                                                          第1 页        共28页 Bash shell学习笔记 .........................................................................................................................2 1. 引言................

kvm虚拟化学习笔记(十九)之convirt集中管理平台搭建

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://koumm.blog.51cto.com/703525/1305553 kvm虚拟化学习笔记(二十)之convirt安装linux系统 http://koumm.blog.51cto.com/703525/1306526 情况说明: (1)本文采用OEL6.3x64操作系统,需要有KVM安装环境.(2)convirt2.1.1采用源码方式安装,convirt环境分别两部分,一部分

Mysql学习笔记(十四)备份与恢复

原文:Mysql学习笔记(十四)备份与恢复 学习内容: 1.数据库的重要数据备份... 2.什么时候需要使用到数据库备份.. 3.如何恢复备份的数据..   1.备份: 说到备份,相比大家都不应该陌生,比如说我们平时在为我们的电脑重新做系统的时候,那么我们保存在电脑里的重要文件我们都需要进行备份..或者是当我们在使用一键还原系统的时候,我们也需要进行备份..那么数据库也不例外,我们需要对数据库里面保存的重要数据进行备份..比如说一个大型的企业,那么必然会有自己的一个大型数据库,那么数据库管理员必