将哈希值排序为数组中的键

时间:2013-05-31 17:05:44

标签: perl

我有一个哈希

%value
g=>10
i=>55
k=>4
n=>100

我有一个数组

@letters = ('k','i','n','g')

请让我知道如何按照数组中键的顺序对哈希进行排序。

2 个答案:

答案 0 :(得分:5)

如果要按照它们在@letters数组中出现的顺序打印哈希值,那么

print join ",", @value{@letters};

答案 1 :(得分:4)

代码:

#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;
use Tie::IxHash;

my %hash = (
      g=>10,
      i=>55,
      k=>4,
      n=>100,
);

my %sorted_hash;
tie %sorted_hash, "Tie::IxHash";

my @array = ('k','i','n','g');
foreach(@array)
{
      if(defined($hash{$_}))
      {
            $sorted_hash{$_} = $hash{$_};
      }
}

print Dumper(%sorted_hash);

打印:

$VAR1 = 'k';
$VAR2 = 4;
$VAR3 = 'i';
$VAR4 = 55;
$VAR5 = 'n';
$VAR6 = 100;
$VAR7 = 'g';
$VAR8 = 10;

提到,我使用了Tie :: ixHash模块。否则,Perl不会对数组键进行排序。

  

这个Perl模块实现了Perl哈希,它保留了哈希元素的添加顺序

http://metacpan.org/pod/Tie::IxHash