比方说,我有一个数组,@theArr,它拥有1000名左右的元素,例如以下内容:
Let's say I have an array, @theArr, which holds 1,000 or so elements such as the following:
01 '12 16 sj.1012804p1012831.93.gz'
02 '12 16 sj.1012832p1012859.94.gz'
03 '12 16 sj.1012860p1012887.95.gz'
04 '12 16 sj.1012888p1012915.96.gz'
05 '12 16 sj.1012916p1012943.97.gz'
06 '12 16 sj.875352p875407.01.gz'
07 '12 16 sj.875408p875435.02.gz'
08 '12 16 sj.875436p875535.03.gz'
09 '12 16 sj.875536p875575.04.gz'
10 '12 16 sj.875576p875603.05.gz'
11 '12 16 sj.875604p875631.06.gz'
12 '12 16 sj.875632p875659.07.gz'
13 '12 16 sj.875660p875687.08.gz'
14 '12 16 sj.875688p875715.09.gz'
15 '12 16 sj.875716p875743.10.gz'
...
如果我的第一组数字(以下简称SJ'和'P'之间的)总是6位数,我不会有问题。但是,当数字翻转到7位数的默认排序停止工作的大7位号码来越小6位数字了。
If my first set of numbers (between the 'sj.' and the 'p') was always 6 digits, I wouldn't have a problem. But, when the numbers roll over into 7 digits the default sort stops working as the larger 7 digit numbers comes before the smaller 6 digit number.
有没有办法告诉Perl的由该数字的字符串中的每个数组元素中进行排序?
Is there a way to tell Perl to sort by that number inside the string in each array element?
看起来像你需要一个 Schwartzian变换
#!/usr/bin/perl
use strict;
use warnings;
my @a = <DATA>;
print
map { $_->[1] } #get the original value back
sort { $a->[0] <=> $b->[0] } #sort arrayrefs numerically on the sort value
map { /sj\.(.*?)p/; [$1, $_] } #build arrayref of the sort value and orig
@a;
__DATA__
12 16 sj.1012804p1012831.93.gz
12 16 sj.1012832p1012859.94.gz
12 16 sj.1012860p1012887.95.gz
12 16 sj.1012888p1012915.96.gz
12 16 sj.1012916p1012943.97.gz
12 16 sj.875352p875407.01.gz
12 16 sj.875408p875435.02.gz
12 16 sj.875436p875535.03.gz
12 16 sj.875536p875575.04.gz
12 16 sj.875576p875603.05.gz
12 16 sj.875604p875631.06.gz
12 16 sj.875632p875659.07.gz
12 16 sj.875660p875687.08.gz
12 16 sj.875688p875715.09.gz
12 16 sj.875716p875743.10.gz
上一篇:在BST节点的所有的父母呢?有的、节点、父母、BST
下一篇:划分问题。问题