【发布时间】:2011-12-18 16:53:32
【问题描述】:
这其实是这个帖子的后续: Perl: Numerical sort of arrays in a hash
我无法编辑原始问题,因为我当前的代码有点不同,所以我只是将其作为另一个问题提出。
好的,使用 Schwarzian 变换后,我有了这个:
my @mylines =("0.899 0.92 cat",
"9.999 0.001 dog",
"-0.52 0.3 humpty",
"13.52 0.09 bumbo",
"-1.52 0.98 nanny",
"3.52 0.34 lala");
my @sorted = map { join ' ', @$_ }
reverse sort { $a->[0] cmp $b->[0] or $a->[1] <=> $b->[1] }
map { [ split ] } (@mylines);
print "$_\n" for @sorted;
我希望输出首先按第一列排序,然后是第二列,但结果是这样的:
9.999 0.001 dog
3.52 0.34 lala
13.52 0.09 bumbo
0.899 0.92 cat
-1.52 0.98 nanny
-0.52 0.3 humpty
我想那是因为它正在对字符进行排序……但我需要对它进行数字排序。我是否需要在排序函数中的某处放置一个类似 java 的“parseInt()”?
【问题讨论】:
-
不,你需要阅读“perldoc perlop”并注意
cmp和<=>之间的区别。 -
我怀疑你会发现 ST 在这种情况下实际上会减慢速度。让你知道。
标签: arrays perl sorting numerical