位置: 编程技术 - 正文

Perl Sort函数用法总结和使用实例(perl中\s+)

编辑:rootadmin

一) sort函数用法

sort LISTsort BLOCK LISTsort SUBNAME LIST

sort的用法有如上3种形式。它对LIST进行排序,并返回排序后的列表。假如忽略了SUBNAME或BLOCK,sort按标准字串比较顺序来进行(例如ASCII顺序)。如果指定了SUBNAME,它实际上是个子函数的名字,该子函数对比2个列表元素,并返回一个小于,等于,或大于0的整数,这依赖于元素以何种顺序来sort(升序,恒等,或降序)。也可提供一个BLOCK作为匿名子函数来代替SUBNAME,效果是一样的。

被比较的2个元素,会被临时赋值给变量$a和$b。它们以引用传递,所以不要修改$a或$b。假如使用子函数,它不能是递归函数。

二) 用法实例

1. 以数字顺序sort 打印结果是:

与之一样的是:

这个很容易理解哦,它只是按自然数的顺序进行sort,偶就不细讲了。

2.1 以ASCII顺序(非字典顺序)进行sort

打印结果:

这等同于:

按ASCII的顺序进行排序,也没什么说的哦。

注意,如果对数字按ASCII顺序进行sort的话,结果可能与你想的不同:

2.2 以字典顺序sort

打印结果是:

use locale是可选的--它让code兼容性更好,假如原始数据包含国际字符的话。use locale影响了cmp,lt,le,ge,gt和其他一些函数的操作属性--更多细节见perllocale的man page。

注意atlarge和at_large的顺序在输出时颠倒了,尽管它们的sort顺序是一样的(sort中间的子函数删掉了at_large中间的下划线)。这点会发生,是因为该示例运行在perl 5._上。在perl版本5.6前,sort函数不会保护有一样values的keys的先后顺序。perl版本5.6和更高的版本,会保护这个顺序。

注意哦,不管是map,grep还是sort,都要保护这个临时变量$_(sort里是$a和$b)的值,不要去修改它在该code里,在对$a或$b进行替换操作s/[/W_]+//g前,先将它们重新赋值给$da和$db,这样替换操作就不会修改原始元素哦。

3. 以降序sort降序sort比较简单,把cmp或<=>前后的操作数调换下位置就可以了。或者改变中间的块或子函数的返回值的标记:或使用reverse函数(这有点低效,但也许易读点):

4. 使用多个keys进行sort要以多个keys来sort,将所有以or连接起来的比较操作,放在一个子函数里即可。将主要的比较操作放在前面,次要的放在后面。

打印结果是:

上述code看起来很复杂,实际上很容易理解哦。@employees数组的元素是匿名hash。匿名hash实际上是个引用,可使用->操作符来访问其值,例如$employees[0]->{SALARY}可访问到第一个匿名hash里SALARY对应的值。所以上述各项比较就很清楚了,先比较SALARY的值,再比较AGE的值,再比较LAST的值,最后比较FIRST的值。注意前2项比较是降序的,后2项是升序的,不要搞混了哦。

5. sort出新数组

打印结果是:

这里是否有点糊涂呀?仔细看就清楚了。0 .. $#x是个列表,它的值是@x数组的下标,这里就是0 1 2 3。$x[$a] cmp $x[$b] 就是将@x里的各个元素,按ASCII顺序进行比较。所以sort的结果返回对@x的下标进行排序的列表,排序的标准就是该下标对应的@x元素的ASCII顺序。还不明白sort返回什么?让我们先打印出@x里元素的ASCII顺序:

打印结果是:

它们在@x里对应的下标是1 2 0 3,所以上述sort返回的结果就是1 2 0 3这个列表了。@rank[1 2 0 3] = 0 .. $#x 只是个简单的数组赋值操作所以@rank的结果就是(2 0 1 3)了。

6. 按keys对hash进行sort

打印结果是:

上述code不难明白哦。sort keys %hash按%hash的keys的ASCII顺序返回一个列表,然后用map进行计算,注意map这里用了双重{{}}里面的 {} 是个匿名hash哦,也就是说map的结果是个匿名hash列表,明白了呀?所以@sorted数组里的元素就是各个匿名hash,通过%$hashref进行反引用,就可以访问到它们的key/value值了。

7. 按values对hash进行sort

打印结果是:

与hash keys不同,我们不能保证hash values的唯一性。假如你仅根据values来sort hash,那么当你增或删其他values时,有着相同value的2个元素的sort顺序可能会改变。为了求得稳定的结果,应该对value进行主sort,对key进行从sort。

这里{ $hash{$a} cmp $hash{$b} or $a cmp $b } 就先按value再按key进行了2次sort哦,sort返回的结果是排序后的keys列表,然后这个列表再交给map进行计算,返回一个匿名hash列表。访问方法与前面的相同,偶就不详叙了。

8. 对文件里的单词进行sort,并去除重复的

大家试试这种用法,我也不是很明白的说@uniq{@F} = ()使用了hash slice来创建一个hash,它的keys是文件里的唯一单词;该用法在语意上等同于$uniq{ $F[0], $F[1], ... $F[$#F] } = ()

各选项说明如下:

9. 高效sorting: Orcish算法和Schwartzian转换对每个key,sort的子函数通常被调用多次。假如非常在意sort运行时间,可使用Orcish算法或Schwartzian转换,以便每个key仅被计算1次考虑如下示例,它根据文件修改日期来sort文件列表。

很巧妙的算法,是不是?因为文件的修改日期在脚本运行期间是基本不变的,所以-M运算一次后,把它存起来就可以了呀。如下是Schwartzian转换的用法:

这个code结合用了map,sort分了好几层,记住偶以前提过的方法,从后往前看。map({ [$_, -M] } @filenames)返回一个列表,列表元素是匿名数组,匿名数组的第一个值是文件名,第二个值是文件的修改日期。

sort( { $a->[1] <=> $b->[1] }...再对上述产生的匿名数组列表进行sort,它根据文件的修改日期进行sortsort返回的结果是经过排序后的匿名数组。

最外围的map( { $_->[0] }...就简单了,它从上述sort产生的匿名数组里提取出文件名。这个文件名就是根据修改日期进行sort过的呀,并且每个文件只运行了一次-M。这就是著名的Schwartzian转换,这种用法在国外perl用户里很流行

推荐整理分享Perl Sort函数用法总结和使用实例(perl中\s+),希望有所帮助,仅作参考,欢迎阅读内容。

Perl Sort函数用法总结和使用实例(perl中\s+)

文章相关热门搜索词:perl sub,perl sort keys,perl sub,perl splice函数,perl substr,perl中sort,perl中sort,perl中sort的用法,内容如对您有帮助,希望把文章链接给更多的朋友!

Perl调用shell命令方法小结 一、systemperl也可以用system调用shell的命令,它和awk的system一样,返回值也是它调用的命令的退出状态.[root@AX3sp2~]#cataa.pl#!/usr/bin/perl-w$file="wt.pl";system("ls-lwt.pl

perl 文件测试操作符汇总 第一篇:操作符含义-r文件或目录可读-w文件或目录可写-x文件或目录执行-o文件或目录归用户所有-R文件或目录对真正用户可读-W文件或目录对真正用户

Perl访问MSSQL并迁移到MySQL数据库脚本实例 Linux下没有专门为MSSQL设计的访问库,不过介于MSSQL本是从sybase派生出来的,因此用来访问Sybase的库自然也能访问MSSQL,FreeTDS就是这么一个实现。Perl中通

标签: perl中\s+

本文链接地址:https://www.jiuchutong.com/biancheng/372571.html 转载请保留说明!

上一篇:Perl内置特殊变量总结(perl处理特殊符号)

下一篇:Perl调用shell命令方法小结(perl执行shell命令)

  • 小规模附加税减半征收什么时候开始
  • 期末应交税费有余额吗
  • 民非企业开通捐赠
  • 包工包料工程要交哪些税
  • 特种设备电梯如何监管
  • 事业基金转入哪个科目
  • 公司成立后有哪些开支
  • 预付水电费后应怎么做账
  • 企业销售产品的成本是指已销产品的
  • 企业在筹办期间发生的开办费计入管理费用账户
  • 什么是个体工商户业主
  • 一般纳税人购进鸡蛋怎样抵扣
  • 企业自产自用需要交增值税吗
  • 本期准予扣除税额是什么
  • 健身房属于什么经营类别
  • 机器设备计提折旧年限是多少
  • 会计科目未付利润属于哪个科目
  • 财政拨款事业单位和全额事业单位
  • 新政府会计制度科目表
  • 杜鹃花怎么养家庭养法视频
  • PHP:file_put_contents()的用法_Filesystem函数
  • 用tomcat部署web项目
  • 预提费用的账务处理
  • 堡垒封印
  • 企业销售不动产增值税税率
  • php抓取网页图片
  • thinkphp5框架介绍
  • 协会会费怎么使用
  • 前端高手
  • laravel event
  • 怎么样写合同书
  • 帝国cms模型
  • mysql行锁的作用
  • 帝国cms会员发布信息数量
  • 织梦图片要放哪里
  • 货物不符合质量条款规定
  • 收到货款的会计分录怎么做账
  • 收回以前年度多发奖金分录
  • 企业之间借款有利息要开票吗
  • 固定成本和变动成本举例
  • 发票红冲操作流程
  • 申请制作广告牌的申请
  • 工伤在门诊的收据能报销吗
  • 抵押贷款购买商品合法吗
  • 财政拨款公司的资金来源
  • 企业支付给其他单位的奖励款需要纳税调整么
  • 现金存入银行的会计凭证
  • 发票红冲后原票是什么状态
  • 商贸公司库存表怎么做
  • 记账凭证的分类及每类的具体含义是什么
  • 企业风险管理有哪些方面
  • 离职补偿金要交个税吗
  • 企业改制后如何脱离原主管部门
  • 使用 GUID 值来作为数据库行标识讲解
  • win10系统怎么做全盘镜像
  • win7 64位系统关机按钮不见了怎么找回 win7关机按钮设置步骤
  • 虚拟系统win10
  • mac自带的看图软件怎么使用
  • linux查inode
  • win10升级100完成不动
  • windows10周年更新
  • 怎样设置Win XP下安装打印机驱动程序
  • mac迅雷不限速
  • win7一进电脑是花屏
  • win7调出ie浏览器
  • win8怎么添加wifi
  • cocos2dx框架
  • perl 字符串处理
  • 安卓炫酷壁纸
  • eclipse开发安卓app实例
  • jquery mobile实例
  • js 拍照
  • linux shell实战
  • [置顶] 转载自官方-unity5.0正式发布了,看看带来哪些重要的新特性!
  • math在java
  • 国家税务局发票查询
  • 税务局怎么添加税种
  • 软件和集成电路企业税收优惠
  • 湖北税务查询电话
  • 天津国税局电子税务局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设