位置: 编程技术 - 正文

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

  • 增值税发票查询网络异常
  • 附加税税负
  • 长期应收款的计税基础 陈版
  • 上月社保未扣款怎么回事
  • 购车增值税可以抵扣多少
  • 应付账款坏账了怎么处理
  • 生产成本月末结转到本年利润里吗
  • 利润和营收哪个更重要
  • 金蝶k3审核过账在哪里
  • 民办非企业单位设立分机构
  • 小规模应交的增值税
  • 向关联企业捐赠现金500万元,假定按照税法规定
  • 限售股流通股
  • 怎样填列分析资产负债表
  • 计提与不计提短贷的区别
  • 别人垫付的医药费,可以报销吗
  • 流转税通俗举例
  • 内蒙古地税电子税务局app
  • 特殊行业会计公司排名
  • 注销公司账不平怎么办
  • 客户退货发到付怎么办
  • 投资收益填在经营所得申报表的哪里
  • 旅游业差额征税怎么计算
  • 云服务器免费使用
  • mac怎么恢复出厂值
  • php获取用户名
  • won10搜索框
  • win10远程连接win7密码正确,无法登陆
  • 交际应酬性支出是什么
  • php aop
  • 年底会计结账
  • php files
  • 一只正在树上吃的苹果
  • 应收款项减值的核算方法
  • 员工不愿意缴纳个税 需要公司承担吗
  • 银行手续费未开发票
  • 印花税的优惠政策和依据
  • 前端报405错误
  • php中foreach循环遍历数组
  • vue2vue3的区别
  • 织梦dedecms如何升级ckeditor
  • 收到员工交来现金怎么入账
  • 期初是什么
  • 出租房产怎么交房产税
  • 房产税一般在哪缴纳
  • 注册资金认缴和实缴的法律风险
  • sql2008r2怎么用
  • 印花税减半征收优惠政策2021
  • 生产企业的生产许可证
  • 劳务公司在异地施工要在哪里缴税
  • 高企数据造假
  • 财务费用减少记借方还是贷方
  • 入库单金额写错可以改吗
  • 单位缴纳工会经费有什么用
  • 非包销的视同买断的账务处理是?
  • 印花税申报流程视频
  • 个体工商户纳税申抿
  • 财税2009年87号文废止
  • 房地产开发企业建造的商品房,在出售前
  • 浅谈基于comsol的锂离子电池仿真
  • sql面试题50题
  • windows锁定用户
  • Linux系统复制图片
  • win7系统每次开机都要选择用户
  • 微信小程序实现账号密码登录
  • toggle button什么作用
  • js动态改变div内容
  • java获取两个日期间的所有月份
  • 你必须知道的家长六种类型
  • shell打开日志文件
  • 隐藏应用名字
  • python怎么编写二维码
  • bootstrap需要学多久
  • 新加坡政治体制的介绍
  • 深圳国税局官网登录
  • 纳税申报的期限是多久
  • 印花税怎么计提和结转
  • 美丽重生李晓晓免费阅读
  • 北京税务代办
  • 关于啤酒包装物押金,下列正确的是( )
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设