perl-sort.docVIP

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
perl-sort

简简单单讲sort 仙子注:本文档和仙子前面的2篇文档"简简单单讲grep","简简单单讲map",都译自网络,加上仙子自己的解释整理而成。原文档出自: /web/20041123005900//rayco/support/perl_tutor.html 文档的Author是位Perl Hacker,曾在Microsoft和T-Mobile工作。要理解他的全部Code并不容易,也许偶讲的也不是很清楚,所以,读者自己也要多动脑筋哦。 (一) sort函数 sort LIST sort BLOCK LIST sort SUBNAME LIST sort的用法有如上3种形式。它对LIST进行排序,并返回排序后的列表。假如忽略了SUBNAME或BLOCK,sort按标准字串比较顺序来进行(例如ASCII顺序)。如果指定了SUBNAME,它实际上是个子函数的名字,该子函数对比2个列表元素,并返回一个小于,等于,或大于0的整数,这依赖于元素以何种顺序来sort(升序,恒等,或降序)。也可提供一个BLOCK作为匿名子函数来代替SUBNAME,效果是一样的。 被比较的2个元素,会被临时赋值给变量$a和$b。它们以引用传递,所以不要修改$a或$b。假如使用子函数,它不能是递归函数。 (二) 用法示例 1. 以数字顺序sort @array = (8, 2, 32, 1, 4, 16); print join(' ', sort { $a <=>; $b } @array), "\n"; 打印结果是: 1 2 4 8 16 32 与之一样的是: sub numerically { $a <=>; $b }; print join(' ', sort numerically @array), "\n"; 这个很容易理解哦,它只是按自然数的顺序进行sort,偶就不细讲了。 2.1 以ASCII顺序(非字典顺序)进行sort @languages = qw(fortran lisp c c++ Perl python java); print join(' ', sort @languages), "\n"; 打印结果: Perl c c++ fortran java lisp python 这等同于: print join(' ', sort { $a cmp $b } @languages), "\n"; 按ASCII的顺序进行排序,也没什么说的哦。 注意,如果对数字按ASCII顺序进行sort的话,结果可能与你想的不同: print join(' ', sort 1 .. 11), "\n"; 1 10 11 2 3 4 5 6 7 8 9 2.2 以字典顺序sort use locale; @array = qw(ASCII ascap at_large atlarge A ARP arp); @sorted = sort { ($da = lc $a) =~ s/[\W_]+//g; ? ?? ?? ?? ?? ???($db = lc $b) =~ s/[\W_]+//g; ? ?? ?? ?? ?? ???$da cmp $db; ? ?? ?? ?? ?? ?} @array; print "@sorted\n"; 打印结果是: A ARP arp ascap ASCII atlarge at_large use locale是可选的--它让code兼容性更好,假如原始数据包含国际字符的话。use locale影响了cmp,lt,le,ge,gt和其他一些函数的操作属性--更多细节见perllocale的man page。 注意atlarge和at_large的顺序在输出时颠倒了,尽管它们的sort顺序是一样的(sort中间的子函数删掉了at_large中间的下划线)。这点会发生,是因为该示例运行在perl 5.005_02上。在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或<=>;前后的操作数调换下位置就可以了。 sort { $b <=>; $a } @array; 或者改变中间的块或子函数的返回值的标记: sort { -($a <=>; $b) } @array; 或使

文档评论(0)

jdy261842 + 关注
实名认证
文档贡献者

分享好文档!

1亿VIP精品文档

相关文档