1

给定一个包含顺序的数组

我的 $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 的顺序根据 key 对这个散列进行排序。

也就是排序后,输出应该是:

"USA"=>'val3'
"IN"=>'val1'
"IN"=>'val8'
"IN"=>'val11'
........
.......
"UK"=>'val4'

有没有简单的方法在 perl 中做到这一点?或者,我需要自己编写这样的函数吗?

4

1 回答 1

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");
      }
   }
}
于 2013-10-28T19:59:22.460 回答