gpt4 book ai didi

perl - 在 Perl 中,如何使用专用子例程按其值对词法散列进行排序?

转载 作者:行者123 更新时间:2023-12-05 01:02:30 25 4
gpt4 key购买 nike

这个有效:

my %score = ( a => 1, b => 2);
@keys = sort {$score{$a} <=> $score{$b}} keys %score;

但是如何将 {..} 中的代码放入专用子例程?

sub by_num {
$score{$a} <=> $score{$b}
}

@keys = sort by_num keys %score;

?

最佳答案

这里的主要问题是有一个可以访问散列的子程序。您要么必须为每个要排序的哈希创建一个函数:

#!/usr/bin/perl

use strict;
use warnings;

{
my %hash = (
a => 1,
b => 2,
c => 3,
);

sub sort_hash_a {
return $hash{$a} <=> $hash{$b};
}

for my $k (sort sort_hash_a keys %hash) {
print "$k\n";
}
}

{
my %hash = (
x => 1,
y => 2,
z => 3,
);

sub sort_hash_b {
return $hash{$a} <=> $hash{$b};
}

for my $k (sort sort_hash_b keys %hash) {
print "$k\n";
}
}

或者创建一个为您创建函数的高阶函数:

#!/usr/bin/perl

use strict;
use warnings;

sub make_hash_sort {
my $hashref = shift;

return sub {
return $hashref->{$a} <=> $hashref->{$b};
};
}

my %hash = (
one => 1,
two => 2,
three => 3,
);

my $sub = make_hash_sort \%hash;

for my $k (sort $sub keys %hash) {
print "$k\n";
}

但是,对于程序员和计算机来说,所有这些通常都是白费力气。几乎在所有情况下, block 语法都更快更易于使用。唯一的异常(exception)是复杂的排序或高度重复的代码。

关于perl - 在 Perl 中,如何使用专用子例程按其值对词法散列进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6566675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com