Perl基本数组排序方法介绍
这篇文章主要介绍了Perl基本数组排序方法介绍,本文讲解基于ASCII码排序、比较函数、按字母顺序排列、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];
Perl基本数组排序方法介绍相关推荐
- C#对象数组排序方法
一个排序的类,用了几种方式实现的. using System; namespace DataStruct { public class Sorter { /// <summar ...
- 数组排序方法及C实现的总结
1.问题描述 数组排序(即按某种特定的顺序排列数据,如升序或降序)是最重要的计算应用之一,银行用帐号对所有的支票进行能够排序,并根据排序结果准备月底的财务报告,学校学生成绩管理系统用数组排序的方法将考 ...
- CSharpGL(36)通用的非托管数组排序方法
CSharpGL(36)通用的非托管数组排序方法 如果OpenGL要渲染半透明物体,一个方法是根据顶点到窗口的距离排序,按照从远到近的顺序依次渲染.所以本篇介绍对 UnmanagedArray< ...
- macbook android 热点,Mac_mac如何做热点?mac创建wifi热点方法介绍, 如果是家里有路由器的, - phpStudy...
mac如何做热点?mac创建wifi热点方法介绍 如果是家里有路由器的,那热点设置就非常的简单了,那要是在特殊情况下,没有热点怎么办呢,不要着急,有一种方法可以用Mac做热点,接下来请仔细阅读教程. ...
- 网页如何打开php文件怎么打开,PHP文件怎么打开?打开PHP文件方法介绍
下载站中的下载连接其实是php脚本文件控制的,有的不支持一些下载工具下载,防止大量占用网站服务器资源,当使用讯雷下载的连接就会失效,也可能是服务器链节地址失效,导致下载到的东西只是也个php脚本文件, ...
- android 充电监听,Android_Android判断和监听底座状态和类型的方法介绍,底座的状态跟充电状态类似, - phpStudy...
Android判断和监听底座状态和类型的方法介绍 底座的状态跟充电状态类似,很多底座提供充电功能(座充). 底座状态同样使用sticky Intent广播.可以查询设备是否插入底座,哪种底座. 判断当 ...
- php 数组索引重新排序,PHP索引数组排序方法整理
这篇文章主要介绍了关于PHP索引数组排序方法整理,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 一.冒泡排序 1. 原理 每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面,逐 ...
- php数组排序的方法有哪些,PHP常见数组排序方法有哪些
PHP常见数组排序方法有哪些 发布时间:2020-12-16 10:43:23 来源:亿速云 阅读:98 作者:小新 这篇文章主要介绍PHP常见数组排序方法有哪些,文中介绍的非常详细,具有一定的参考价 ...
- webview 加载php页面内容,WebView加载优化的方法介绍
本篇文章给大家带来的内容是关于WebView加载优化的方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. WebView加载优化 当WebView的使用频率变得频繁的时候,对于其 ...
最新文章
- 邬贺铨院士:认识工业互联网
- Linux内核调试 - 一般人儿我都不告诉他(一)【转】
- 人人都会设计模式:03-策略模式--Strategy
- javascript基础修炼(4)——UMD规范的代码推演
- leetcode 142 --- linked-list-cycle-ii
- 绝,Java 中创建对象的 5 种方法!
- 需要写的一些pycoe
- android游戏模式,注重游戏体验 Android 12提供原生游戏模式
- Dubbo项目基本业务基础构建
- php mencache扩展,【memcache缓存专题(3)】PHP-memcache扩展的安装以及使用
- Java 输入一个整数,计算它各位上数字的和。(注意:是任意位的整数)
- linux gns3使用教程,Linux下GNS3报错解决方法
- CDlinux制作U盘启动盘,打造自己的口袋系统
- 3个文件,不到400行代码打造经典吃豆人小游戏
- 动态修改spine动画渲染层次
- Google账户二次验证取消
- 倾斜摄影当中重叠度、传感器尺寸、焦距等参数问题梳理
- 创客必备!树莓派知识大扫盲
- 实战:使用Pytorch搭建分类网络(肺结节假阳性剔除)
- Windows 10 (Win10) 将绿色免安装软件,添加到动态磁贴