4

我有一个哈希

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

我有一个数组

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

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

4

2 回答 2

5

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

print join ",", @value{@letters};
于 2013-05-31T17:09:12.370 回答
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

于 2013-05-31T17:21:14.313 回答