如何在perl中按值对哈希数组进行排序?

时间:2012-03-12 00:18:17

标签: perl

我有一个程序可以找到目录中的所有文件,并创建一个名称和大小的哈希数组。

例如

%files = ("file1" => 10, "file2" => 30, "file3" => 5);

我希望能够按大小降序对文件进行排序,并将名称/值添加到新数组中。

例如

%filesSorted = ("file2" => 30, "file1" => 10, "file3" => 5);

我找到了许多方法按值对数组进行排序,然后打印值,但这不是我想要的。

1 个答案:

答案 0 :(得分:6)

您必须按排序顺序将文件名放入数组。与Perl哈希不同,数组是有序的,并将保留其顺序。此代码使用您自己的数据

演示了这一点
use strict;
use warnings;

my %files = (file1 => 10, file2 => 30, file3 => 5);

my @sorted = sort { $files{$b} <=> $files{$a} } keys %files;

foreach my $file (@sorted) {
  print "$file => $files{$file}\n";
}

<强>输出

file2 => 30
file1 => 10
file3 => 5