嘿伙计们,我有这个名为电话簿的文件
Steve Blenheim:239-923-7366:238-934-7865:95 Latham Lane, Easton, PA 83755:11/12/56:20300
Betty Boop:245-836-8357:245-876-7656:635 Cutesy Lane, Hollywood, CA 91464:6/23/23:14500
Igor Chevsky:385-375-8395:385-333-8976:3567 Populus Place, Caldwell, NJ 23875:6/18/68:23400
Norma Corder:397-857-2735:397-857-7651:74 Pine Street, Dearborn, MI 23874:3/28/45:245700
Run Code Online (Sandbox Code Playgroud)
我试图从第二个单词(姓氏)按反向字母顺序对文本进行排序,但却无法找到如何进行排序.我这样做是从文件中读取的
open (FILE, phonebook);
@line = <FILE>;
close(FILE);
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我可以按字母顺序排序第一个字段并反转,但似乎无法让第二个字段正确排序.提前致谢
hob*_*bbs 10
我同意tadmc的担心,第二个字段,由空格并不总是姓氏,但回答问题,因为它属于第二个字段,你可以使用它split,你可以这样排序:
简单但非常慢的版本(易于阅读,但每次比较两行时重新分割每个字段,这是低效的).
@lines = sort { # Compare second fields
(split " ", $a)[1]
cmp
(split " ", $b)[1]
} @lines;
Run Code Online (Sandbox Code Playgroud)
在使用Schwartzian变换版本(不完全一样的事情与前一个,只有更快):
@lines = map { # Get original line back
$_->[0]
} sort { # Compare second fields
$a->[1] cmp $b->[1]
} map { # Turn each line into [original line, second field]
[ $_, (split " ", $_)[1] ]
} @lines;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3169 次 |
| 最近记录: |