我对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 ],
);