给定一个包含顺序的数组
my $ ord =(“USA”,“IN”,“AUS”,“NZ”,“NEP”,“CHN”,“ARG”,“UK”);
另外,我们给出了哈希:
my %hash = ("IN" => 'val1', "AUS" => 'val2',
"USA" => 'val3', "UK" => 'val4',
"CHN"=>'val5',"UK"=>'val6',
"NZ"='val7',"IN"=>'val8',
"NEP"=>'val9',ARG=>'val10',
"IN"=>'val11');
我们必须根据$ ord的顺序对密钥进行排序。
即排序后,输出应为:
"USA"=>'val3'
"IN"=>'val1'
"IN"=>'val8'
"IN"=>'val11'
........
.......
"UK"=>'val4'
在perl中有一种简单的方法吗?或者,我是否需要自己编写这样的功能?
答案 0 :(得分:3)
您的哈希不可能包含具有相同键的两个(或三个)元素。最好创建一个数组哈希。
my @data = (
IN => 'val1',
AUS => 'val2',
USA => 'val3',
UK => 'val4',
CHN => 'val5',
UK => 'val6',
NZ => 'val7',
IN => 'val8',
NEP => 'val9',
ARG => 'val10',
IN => 'val11',
);
my @order = qw( USA IN AUS NZ NEP CHN ARG UK );
my %vals_by_country;
while (@data) {
my $country = shift(@data);
my $val = shift(@data);
push @{ $vals_by_country{$country} }, $val;
}
for my $country (@order) {
if (my $vals = $vals_by_country{$country}) {
for my $val (@$vals) {
print("$country: $val\n");
}
}
}