我有下一个哈希:
%hash = (
name => {
pos => 1
},
name_xxx => {
pos => 2
},
name_yyy => {
pos => 3
},
)
并要构造下一个数组(键必须由pos
排序):
qw/ name name_xxx name_yyy /
按给定顺序提取哈希键的最短和/或最快方法是什么?
答案 0 :(得分:5)
您拥有的不是散列,而是散列引用(缺少逗号)。要获取密钥,请使用keys并取消引用:
#!/usr/bin/perl
use warnings;
use strict;
my $hash_ref = {
name => {pos => 1},
name_xxx => {pos => 2},
name_yyy => {pos => 3},
};
my @keys = sort { $hash_ref->{$a}{pos} <=> $hash_ref->{$b}{pos} }
keys %$hash_ref;
print "@keys\n";
答案 1 :(得分:3)
只需使用keys
和sort
#!/usr/bin/env perl
use warnings;
use strict;
my %hash = (
name => {
pos => 1
},
name_xxx => {
pos => 2
},
name_yyy => {
pos => 3
},
);
my @sorted_array = sort { $hash{$a}{pos} <=> $hash{$b}{pos} } (keys %hash);
print "@sorted_array", "\n";
它将按pos值进行数字排序。
答案 2 :(得分:1)
最短的方法是使用List::UtilsBy,它内部对其大部分功能进行Schwartzian变换。但是,在这种情况下,它可能会变慢,因为散列访问速度很快,并且比标准sort()会增加额外的开销。可能更快的情况是,例如,您根据慢子程序调用的结果进行排序。
asp-items