位置: 编程技术 - 正文

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命令)

  • 出口退税 系统
  • 自查补报以前年度收入可以补在当前属期吗
  • 企业所得税如何合理避税?
  • 以前年度遗留的个税怎么处理
  • 工程施工是资产还是负债
  • 销项税能抵扣么
  • 独资企业怎么交所得税
  • 固定模板的东西叫什么
  • 个人动产租赁所得税税率表最新
  • 税务稽查可否清算土地增值税
  • 用银行存款支付罚款
  • 购入材料用于安装工程
  • 研发费用加计扣除行业
  • 城建税和教育费附加可以税前扣除吗
  • 主营业务收入计入什么明细账
  • 在建工程完工结转
  • 现金存入银行会计摘要怎么写
  • 固定资产汽车抵扣新政策
  • 百望税控盘电子发票
  • 个人独资企业是一般纳税人吗
  • 生产企业电费要不要计提?
  • 纳税人签章填什么
  • 对公账户每个月
  • 固定资产停止使用还计提折旧吗
  • 生产性生物资产包括哪些
  • 高新企业产品开发的折旧费用可以税前扣除吗?
  • 营改增后的税率
  • 招标文件中资金性质应填什么
  • ie增强的安全配置已启用上不了网
  • 业务招待费是收入的
  • 主营业务成本净额计算公式
  • 缴纳印花税怎么算
  • 实收资本属于哪类
  • 建安营改增时间
  • 所得税特殊性税率是多少
  • 股权转让的不仅是权利还有义务
  • kms.exe
  • vue数据更新会触发什么生命周期
  • 材料入库款项未付会计分录
  • service的启动方式及生命周期
  • phpstorm配置php环境 mac os
  • php照片上传
  • 运输中合理损耗计入采购成本
  • 办公室装修款怎么做账
  • html中写php
  • 图书发行员证书在哪里办理
  • 小微企业所得税如何填报
  • 背书转让流程图
  • 临时贷款属于什么会计科目
  • 外贸出口备案需准备什么资料
  • sql 临时数据
  • 工业设备种类
  • 一般纳税人商贸企业的税负是多少
  • 内账需要哪些单据
  • 差额征税如何做分录
  • 融资租赁汽车怎么投诉电话
  • 增值税增量留抵退税进项构成比例
  • 付别人押金的会计分录
  • 收不到物业费不想干了
  • 如何计提五险一金比例
  • 代理进口业务会计分录
  • mysql中增删改查语句
  • 品牌笔记本电脑排行
  • sniffer.exe - sniffer是什么进程
  • win7系统怎么设置桌面便签
  • win8怎么关闭电脑
  • jq点击图片让图片进行切换
  • jquery右击事件
  • 什么是javascrip
  • 2个月培训
  • jquery调用controller
  • javascript中checkbox使用方法实例演示
  • js常用方法总结
  • 四川省税务局官方网站申报窗口
  • 怎样纳税申报和缴纳
  • 山西税务官网登录
  • 农村饮水扶持资金申请报告
  • 缴纳了车辆购置税能退吗
  • 软件著作权可以转让公司吗
  • 工程审计费计入什么科目
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设