Perl对散列进行排序,并覆盖/添加到新变量中



我对perl还很陌生,我需要找到一种对哈希进行排序的方法。许多示例将运行排序,然后只打印到控制台。我需要新的散列变量包含按排序的密钥。

例如:

my %planets = (
Mercury => 0.4,
Venus   => 0.7,
Earth   => 1,
);

foreach my $name (sort keys %planets) {
printf "this $name n";
}

我的意思是,我不需要打印,而是需要将它引用回另一个变量,甚至%planets本身。

所以我预期的最终散列将是

%new_hash = (
Earth => 1,
Mercury => 0.4,
Venus => 0.7
);

你不能。没有所谓的排序散列。


没有任何内容表明您必须迭代sort的结果。您可以将其存储在阵列中以备日后使用。

my @sorted_keys = sort keys(%planets);

另一种可能性是在排序时转换您正在使用的数据结构。

my @sorted_planets =
map { [ $_, $planets{$_} ] }
sort keys(%planets);

这产生:

my @sorted_planets = (
[ Earth   => 1   ],
[ Mercury => 0.4 ],
[ Venus   => 0.7 ],
);

最新更新