2012-03-12 60 views
-4

我有一个程序可以查找目录中的所有文件,并创建一个名称和大小的哈希数组。如何在perl中按值排序哈希数组?

例如

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

我希望能够通过大小降序对文件排序和名称/值添加到一个新的数组。

例如

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

我发现有很多方法可以通过数值数组排序,然后打印值,但是这不是我想要的。

+1

这是没有意义的说明了这一点。哈希本质上是未排序的。你的'%files'和'%filesSorted'是等价的;您只需编写'%filesSorted =%files;'即可获得相同的效果。 – ruakh 2012-03-12 00:19:56

+0

[基于perl中的哈希中的值进行排序的简单方法]的可能重复(http://stackoverflow.com/questions/5972224/the-simple-way-to-sort-based-on-values-in- a-hash-in-perl) – 2012-03-12 00:21:59

+0

欢迎来到StackOverflow。发布新问题前请使用搜索(或谷歌);许多已经被问及回答。 – 2012-03-12 00:22:37

回答

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 
+0

鲍罗丁 - 修正输出和代码,它应该是降序。它应该是'sort {$ files {$ b} <=> $ files {$ a}}键%文件;' – 2012-03-12 06:52:08

+0

完成。谢谢德文德拉。 – Borodin 2012-03-12 07:22:20

+0

Borodin-欢迎使用 – 2012-03-12 07:43:06