位置: 编程技术 - 正文

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

  • 递延所得税资产借贷方向
  • 企业所得税会计分录怎么做
  • 买车要交哪些税收
  • 新公司开基本户银行选择
  • 企业支付宝要交哪些税
  • 财务发票报销时限是多久
  • 结构性存款认购时间为募集期的几点
  • 小规模增值税征收条件
  • 建筑业暂估成本表
  • 民间非营利性组织
  • 砂石的资源税怎么算
  • 免税申请怎么办理
  • 美金公户打入个人账户
  • 跨月未抵扣的专用发票开红字发票
  • 仓储租赁增值税
  • 小额开专票
  • 财务报表依据的会计记录
  • 税费五个点怎么算
  • 公司为职工缴纳的医保不计入账户吗
  • 增值税发票金额是含税还是不含税价
  • 护建设税和教育费附加?
  • 委托采购是什么意思
  • 小规模纳税人亏损要交税吗
  • 投资性房地产企业有哪些
  • win11怎么设置声音
  • 公司发行股票如何做账
  • 杜鹃花怎么养家庭养法视频
  • 高新技术企业如何节税
  • win10开机强制进入高级选项怎么退出
  • 时序模型算法
  • phpqrcode 实例
  • 无形资产相关税费
  • php文件上传技术
  • 赤狐 (© Yossi Eshbol/Minden Pictures)
  • js处理表格数据
  • jquery获取值的几种方法
  • 安装libtool
  • 公司注册资金多长时间可提出来
  • 性能优化模式
  • hashmap resize源码
  • 开票软件是什么图标
  • switch关键账号教程
  • php判断是否为整数
  • 物流货物丢失赔偿按照运费10倍
  • 非货币性资产交换的记忆口诀
  • 开具增值税专用发票是什么意思
  • 合伙企业需要申报哪些税
  • sql查询语句怎么用
  • 委托代理出口如何缴纳增值税
  • 固定资产报废如何进行账务处理
  • 收到红字发票如何入账
  • 企业研发费用怎么证明
  • 小规模附加税减半征收什么时候开始
  • 申报和做账必须一致吗
  • 装修公司完工交付文案
  • 冲销以前年度费用会计分录
  • 哪些税费计入管理费用
  • 本月合计结账
  • linux切换到home文件夹
  • win xp系统安装
  • win7系统如何设置
  • 电脑审核策略更改是什么意思
  • winxp鼠标右键菜单栏怎么改
  • linux服务器日志文件在哪里
  • cocos2djs
  • unity web端
  • 浏览器app测试要点
  • unity中time.deltatime
  • python文件与目录操作
  • js操作对象的方法
  • 常见python函数
  • python爬取前程无忧
  • android studio 安装好后怎么在桌面找到
  • 小规模企业零申报怎么操作
  • 中国税务社保缴费app下载
  • 北京通州国税局进面分数2022
  • 租房交税是房东交还是中介交
  • 公司注销时注册资金未缴完
  • 潍坊市的职工医保多少钱
  • 公司欠税无力偿还怎么办
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设