位置: 编程技术 - 正文

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

  • 离职员工奖金发放规定
  • 企业税收收入怎么计算
  • 个体工商户属于非法人组织吗
  • 其他应付款二级明细
  • 属于企业期间费用的有
  • 三栏式明细账月结
  • 汇款手续费的会计科目
  • 结转当月材料采购成本的会计分录怎么做?
  • 企业所得税弥补亏损明细表怎么填写
  • 增值税免税收入汇算清缴的时候填哪
  • 年终所得税汇算提示成本费用与实际取得发票有差异
  • 会议费增值税专用发票税率
  • 事业编年底
  • 同一个月两家单位交公积金
  • 注册资本越大越有实力
  • 计提厂房租金怎么做账?
  • 加计扣除10%进项税账务处理 如何填表
  • 转回已确认固定资产减值损失的会计处理怎么做?
  • 把快速打开
  • 职工福利费的计提标准
  • 清卡处于非征期是什么意思
  • 稳增长促转型
  • php计算时间
  • smarty模板判断数组为空的方法
  • 外销收入含税吗
  • 日本北海道 (© Hiroshi Yokoyama/eStock Photo)
  • 用gpu运行python
  • 业务招待费专票可以抵扣增值税吗
  • 报销差旅费退回现金会计分录
  • 金税盘锁死咋办
  • 长期待摊费计入哪个科目
  • crontab命令用法
  • 写一个简单的php程序代码
  • init 6命令
  • 对公账户每笔钱都得做账吗
  • 业务出差餐费如何记账
  • seata1.3.0配置
  • 公允价值变动损益
  • 员工去外地培训费怎样入账
  • 转出未交增值税最终怎么转平
  • linux mysql 找回密码
  • mysql中You can’t specify target table for update in FROM clause错误解决方法
  • 法定盈余公积的主要用途
  • 定期定额个体工商户怎么报税
  • 应付账款抹零摘要怎么写
  • 无形资产如何计提减值
  • 只知道主营业务怎么办
  • 事业单位的职工可以办营业执照吗
  • 加计抵减附加税怎么算
  • 贷款服务有哪些项目
  • 房地产企业预付账款会计分录
  • 医药进销存管理系统
  • 红字冲销发票的作用
  • 月末一次加权平均和移动加权平均的区别
  • sqlserver表排序
  • sql中分页
  • sqlserver表死锁
  • mysql数据库基本知识点总结
  • 怎么把操作系统转移到另一个盘
  • 系统备份恢复系统
  • linux px
  • 系统用户在哪里
  • scanregistry.exe - scanregistry是什么进程 有什么用
  • win8如何切换用户登录
  • win7速度
  • win10怎么这只让任务栏图标居中显示?
  • js倒计时结束操作
  • 详细说明什么是支撑
  • 骨骼动画原理
  • 基于jQuery实现Tabs选项卡自定义插件
  • Python 装饰器深入理解
  • vue购物车功能
  • 安装了python2.7和3.6怎么切换版本
  • css图片渐变效果
  • python数学题
  • 重庆市电子税务局发票查询
  • 个人所得税自行纳税申报表(A表)怎么填写
  • 深圳市国家税务局赵雨婷
  • 企业交社保可以退税吗
  • 企业将持有的交易性金融资产售出,实际收到出售价款
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设