Perl 从散列中获取排序键
这是\%spec\u散列的数据转储程序。 它是按一个全国性的交换和符号分组的Perl 从散列中获取排序键,perl,hash,Perl,Hash,这是\%spec\u散列的数据转储程序。 它是按一个全国性的交换和符号分组的 foohost:~/walt $ vi /tmp/footoo $VAR1 = { 'ARCX' => { 'IACI' => 1, 'MCHP' => 1, }, 'AMXO' => {
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"
}
默认情况下不会对其输出进行排序
尝试添加到脚本中
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
}
};
注意:如果我理解正确,可以修改它以包括您定义的排序子例程
for my $exch (sort keys %spec_hash) {
for my $sym (sort keys %{ $spec_hash{$exch} }) {
print "Exchange: $exch, Symbol: $sym\n";
}
}
您想循环每个符号,但它们是按交换分组的,因此必须首先循环交换。foreach my$exch排序键%spec_hash{…}有什么问题?编辑了上面的内容-它打印出一个十六进制值--key:AMXO,value:HASH0x9cc88a4-在上一条语句中,您使用了$exch两次,作为新迭代器和旧值。对于我的$exch排序键%{$spec_hash{$exch}}{这是有效的-我不知道为什么,也不知道你是怎么知道的。