我有一个如下所示的数组哈希:
{ $key, [$val1, $val2] }
我正在尝试按数组排序数组的第二个值并打印出整个哈希值。我看过Schwartzian Transform的帖子,但我还没有看到一个完全符合我想要的帖子。我也对语法以及如何将排序后的值映射回原始{$key, [$val1, $val2] }
表单感到困惑。任何帮助将不胜感激!
答案 0 :(得分:14)
不太确定你指的是什么,但这就是你如何在哈希内部对数组值实现排序例程:
my %hash = ( 'key1' => [ 1, 2 ], 'key2' => [ 2, 3 ] );
for my $key ( sort { $hash{$a}[1] <=> $hash{$b}[1] } keys %hash ) {
print "$key => '", join(", ", @{$hash{$key}}), "'\n";
}
答案 1 :(得分:7)
我真的想要使用Schwartzian-Transform,这是一种方法:
#!/usr/bin/perl
use Data::Dump qw(dump);
my %hash = (k1 => [1, 2], k2 => [24, 5], k3 => [5, 1]);
foreach(
sort { $a->[1] <=> $b->[1] }
map { [$_, $hash{$_}->[1] ] } keys %hash) {
say $_->[0],' => ',dump$hash{$_->[0]};
}
<强>输出:强>
k3 => [5, 1]
k1 => [1, 2]
k2 => [24, 5]
<强> NB:强>
我只是将这个答案作为Schwartzian变换的一个例子
但正如评论中所述,在问题中解释的情况下不需要它,当排序前对阵列的每个元素进行一些计算时,ST是节省成本的。对于提出的问题,没有计算要做,所以不要在这里使用ST。