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

问题描述 投票:0回答:1

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

示例:

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

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

示例:

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

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

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

perl
1个回答
8
投票

您必须将文件名按排序顺序放入数组中。与 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
© www.soinside.com 2019 - 2024. All rights reserved.