【发布时间】:2016-04-27 14:44:36
【问题描述】:
我有一个像下面这样的哈希:
my %hash=( '(293 to 296)' => 2,
'(3118 to 3121)' => 2,
'(330 to 333)' => 2,
'(2126 to 2129)' => 2,
'(1999 to 2002)' => 2,
'(2138 to 2141)' => 9,
'(771 to 774)' => 4,
'(2016 to 2019)' => 1,
'(888 to 891)' => 5,
'(3102 to 3105)' => 1,
);
我想使用键对哈希进行排序,其中键包含括号。我试过下面的代码,
foreach $key(sort {$b <=> $a} keys %hash)
{
print $key;
}
我得到了以下,未按数字排序:
(888 至 891)(2016 至 2019)(293 至 296)(3118 至 3121)(3102 至 3105)(330 至 333)(1999 至 2002)(2126 至 2129)(2138 至 2141)(771 至 774)
我希望得到一个按数字排序的输出,如下所示。请建议我实现以下目标的方法:
(293 to 296)
(330 to 333)
(771 to 774)
(888 to 891)
(1999 to 2002)
(2016 to 2019)
(2126 to 2129)
(2138 to 2141)
(3102 to 3105)
(3118 to 3121)
【问题讨论】:
-
如果范围重叠怎么办?您应该按开始、结束还是中位数排序?
-
Ithnk 您正在寻找的是“natural sorting” - SO 上甚至还有一个标签。我已将其添加到问题中。有关示例,请参阅我自己和 @Borodin 的回复。
标签: perl sorting hash natural-sort