perl中的自定义数组排序
发布时间:2020-12-15 22:00:31 所属栏目:大数据 来源:网络整理
导读:我有一组perl do-do任务看起来像这样: @todos = ( "1 (A) Complete online final @evm4700 t:2010-06-02","3 Write thank-you t:2010-06-10","4 (B) Clean t:2010-05-30","5 Donate to LSF t:2010-06-02","6 (A) t:2010-05-30 Pick up dry cleaning","2 (C)
我有一组perl do-do任务看起来像这样:
@todos = ( "1 (A) Complete online final @evm4700 t:2010-06-02","3 Write thank-you t:2010-06-10","4 (B) Clean t:2010-05-30","5 Donate to LSF t:2010-06-02","6 (A) t:2010-05-30 Pick up dry cleaning","2 (C) Call Chris Johnson t:2010-06-01" ); 第一个数字是任务的ID.如果任务旁边有([A-Z]),则定义任务的优先级.我想要做的是以一种将优先级项放在第一位的方式对任务数组进行排序(按优先顺序递减,从A-Z开始): @todos = ( "1 (A) Complete online final @evm4700 t:2010-06-02","2 (C) Call Chris Johnson t:2010-06-01" "3 Write thank-you t:2010-06-10",); 我不能使用常规sort()因为任务旁边的ID,所以我假设需要某种自定义排序子程序.但是,我对如何在perl中高效地完成此任务的知识很少. 谢谢,所有. 解决方法
听起来你想要
Schwartzian transform:
@todos = map { $_->[0] } sort { $a->[1] cmp $b->[1] or $a->[0] cmp $b->[0] } map { [ $_,/^d+ (([[:alpha:]]))/ ? $1 : "[" ] } @todos; “[”是“Z”后的字符;将这个“优先级”赋予其他未优先级的项目将在优先级项目之后对它们进行排序. 或者,也许更容易掌握: @todos = map { substr $_,1 } sort map { (/^d+ (([[:alpha:]]))/ ? $1 : "[") . $_ } @todos; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- 测试 – 什么_(下划线)在Spock测试中意味着什么?
- mybatis动态sql之foreach补充(三)
- @ConfigurationProperties 注解使用姿势,这一篇
- Delphi 中哈希表TStringHash和THashedStringList
- Perl究竟如何处理运算符链接?
- Golang for loop不会停止
- php – Laravel 5.4:执行原始查询并在视图中显示
- my music / NightWish / Groove Coverage / DJ
- Delphi XE8中的DBExpress使用ODBC方式连接MySQL
- [译]大数据分析平台搭建教程:基于Apache Zeppel
热点阅读