从哈希中获取排序键

时间:2014-08-05 17:46:10

标签: perl hash

这是\%spec_hash的数据转储程序。 它按国家交换组 - 和符号组分类。

foohost:~/walt $ vi  /tmp/footoo
$VAR1 = {
          'ARCX' => {
                      'IACI' => 1,
                      'MCHP' => 1,
                    },
          'AMXO' => {
                      'YUM' => 1,
                      'SYK' => 1,
                    },
          'XISX' => {
                      'FCEL' => 1,
                      'GPS' => 1,
                    }
        };

我试图按键排序这两个哈希但不能。出于调试目的,我真的想看看从这些哈希中抽出的东西

foreach my $exch (sort keys %spec_hash) {
foreach my $exch (sort keys %{$spec_hash{$exch}}) {

如果我注释掉翻斗车并尝试常规排序:

#print Dumper(\%spec_hash) ;

foreach my $exch (sort keys %spec_hash) {
#foreach my $exch (sort keys %{$spec_hash{$exch}}) {
    print "key: $exch, value: $spec_hash{$exch}\n"
    }

这是我得到的:

key: AMXO, value: HASH(0x9cc88a4)
key: ARCX, value: HASH(0x9cd6f1c)
key: XISX, value: HASH(0x9cbd5f0)

并尝试打印这个打印件什么都没有:

foreach my $exch (sort keys %{$spec_hash{$exch}}) {
    print "key: $exch, value: $spec_hash{$exch}\n"
    }

2 个答案:

答案 0 :(得分:2)

如果我理解正确,

for my $exch (sort keys %spec_hash) {
   for my $sym (sort keys %{ $spec_hash{$exch} }) {
      print "Exchange: $exch, Symbol: $sym\n";
   }
}

您希望遍历每个符号,但它们按交换分组,因此您必须首先遍历交换。

答案 1 :(得分:0)

Data::Dumper默认不对其输出进行排序。

尝试将$Data::Dumper::Sortkeys = 1;添加到您的脚本中。

use strict;
use warnings;

use Data::Dumper;

my %hash = (
    'ARCX' => { 'IACI' => 1, 'MCHP' => 1, },
    'AMXO' => { 'YUM'  => 1, 'SYK'  => 1, },
    'XISX' => { 'FCEL' => 1, 'GPS'  => 1, },
);

print do {
    local $Data::Dumper::Sortkeys = 1;
    Dumper \%hash;
};

输出:

$VAR1 = {
          'AMXO' => {
                      'SYK' => 1,
                      'YUM' => 1
                    },
          'ARCX' => {
                      'IACI' => 1,
                      'MCHP' => 1
                    },
          'XISX' => {
                      'FCEL' => 1,
                      'GPS' => 1
                    }
        };

注意:可以修改此选项以包含您定义的排序子例程