Perl排序哈希的数组

kur*_*ifu 4 arrays sorting perl hash

我有一个如下所示的数组哈希:

{ $key, [$val1, $val2] }
Run Code Online (Sandbox Code Playgroud)

我正在尝试按数值排序数组的第二个值并打印出整个哈希值.我看过Schwartzian变换的帖子,但我还没有看到一个完全符合我想要的东西.我也对语法以及如何将排序后的值映射回原始{$key, [$val1, $val2] }形式感到困惑.任何帮助,将不胜感激!

TLP*_*TLP 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";
}
Run Code Online (Sandbox Code Playgroud)


Tot*_*oto 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]};
}
Run Code Online (Sandbox Code Playgroud)

输出:

k3 => [5, 1]
k1 => [1, 2]
k2 => [24, 5]
Run Code Online (Sandbox Code Playgroud)

注意:

我只是将这个答案作为Schwartzian变换的一个例子

但正如评论中所述,在问题中解释的情况下不需要它,当排序之前对阵列的每个元素进行一些计算时,ST是节省成本的.对于提出的问题,没有计算要做,所以不要在这里使用ST.

  • @TLP:OP专门询问了Schwartzian变换,所以我认为它取而代之的是他得到了一个实现的例子.我确实认为,对于特定情况的解释应该伴随算法,因为这些类型的表达式对于Perl新手来说可能有点吓人. (3认同)
  • @flesk人们要求各种他们不需要的疯狂事物.= P凭借他的数据,Schwartzian Transform实际上增加了成本.我想这显示它是正确的,但提及在这种情况下不需要它是一个好主意. (2认同)