gpt4 book ai didi

perl - 在 Perl 中打印多键哈希

转载 作者:行者123 更新时间:2023-12-05 00:51:03 26 4
gpt4 key购买 nike

我有一个 perl 散列,我正在像这样编制索引:

my %hash;
$hash{'number'}{'even'} = [24, 44, 38, 36];
$hash{'number'}{'odd'} = [23, 43, 37, 35];

当我尝试像这样打印键名时:

foreach my $key (keys %hash{'number'})
{
print "Key: $key\n";
}

我收到以下错误:

Type of arg 1 to keys must be hash (not hash slice) at test.pl

然而,当我将数组引用传递给一个函数并在那里打印它时,它会打印值:

test(\%hash);

sub test
{
my ($hash) = @_;
foreach my $key (keys %{$hash->{'number'}})
{
print "Key: $key\n"; #outputs: even odd
}
}

有人可以告诉我这里出了什么问题吗?另外,如果我有多键散列,在这种情况下,如果我这样做,散列由“数字”和“偶数”或“奇数”索引:

foreach my $key (keys %hash)
{
print "First Key: $key\n"; #Outputs number
}

那么我是否总是将“数字”作为正确的输出,而我永远无法将“偶数”、“奇数”作为输出,对吗?这只是为了了解良好的编码习惯:)

这是完整的代码:

sub test
{
my ($hash) = @_;
foreach my $key (keys %{$hash->{'number'}})
{
print "Key: $key\n";
}

}

my %hash;
$hash{'number'}{'even'} = [24, 44, 38, 36];
$hash{'number'}{'odd'} = [23, 43, 37, 35];

test(\%hash);

foreach my $key (keys %hash)
{
print "First Key: $key\n";
}

foreach my $key (keys %hash{'number'})
{
print "Key: $key\n";
}

谢谢,新手

最佳答案

my %hash;
$hash{'number'}{'even'} = [24, 44, 38, 36];
$hash{'number'}{'odd'} = [23, 43, 37, 35];

%hash 是一个散列,其键是字符串 ('number'),其值是散列引用。

foreach my $key (keys %hash{'number'})
{
print "Key: $key\n";
}

要引用属于 %hash 的值,您需要编写 $hash{'number'},而不是 %hash{'number'

但是$hash{'number'}是哈希引用,不是哈希。要引用它引用的哈希,你可以这样写:

%{$hash{'number'}}

把它们放在一起:

my %hash;
$hash{'number'}{'even'} = [24, 44, 38, 36];
$hash{'number'}{'odd'} = [23, 43, 37, 35];

foreach my $key (keys %{$hash{'number'}}) {
print "Key: $key\n";
}

将产生这个输出:

Key: even
Key: odd

(可能不是这个顺序)。

关于perl - 在 Perl 中打印多键哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9337661/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com