如何在perl中排序哈希



我需要使用perl排序。

我的哈希是:

2 nameA
5 nameB
4 nameC
2 nameD
3 nameE

结果应为:

2 nameA
2 nameD
3 nameE
4 nameC
5 nameB

如何?

谢谢,

miko

对密钥进行排序并将其存储在数组中。阵列将保留订单。我在这里使用了一种数值,因为您的键是数字的。

my @sorted_keys = sort { $a <=> $b } keys %hash;

现在您可以按照您的意愿访问它们:

print "$_ $hash{$_}n" for @sorted_keys;

但是,您不能将排序结果存储在哈希中,因为没有排序哈希。而且您不能有一个哈希,其中键2以两个不同的值出现。设计是不可能的。

例如,如果您在文件中有这些数据,则可以进行Schwartzian变换。(从底部及以上阅读评论,这将是有道理的):

open my $fh, "<", $filename or die $!;
my @sorted = map $_->[2],                   # Then map them back into the third
             sort {                     
                 $a->[0] <=> $b->[0] ||     # Sort them numerically on first
                 $a->[1] cmp $b->[1]        # ..or alphabetically on second col
             } map [ split, $_ ],           # Map them into a 3-element array ref
                 <$fh>;                     # Take all the lines in the file

当无法区分两个值时,类似的链式语句将生效,例如" 2"one_answers" 2"从<=>操作员返回0。在这种情况下,类型将在第二列上按字母顺序排列,我们存储在数组元素1。

中。
foreach (sort keys %hash) {
  print "$_ : $hash{$_} n";
}

最新更新