关于以下代码段,我想知道我对几个问题的理解是否正确?
1)在$model->{in1}->{tra1}->{data}}
的结构中,“in1”,“tra1”和“data”都表示不同级别的哈希结构中的特定键。
2)$#{$model->{in1}->{tra1}->{data}}
代表一个数组吗?
3)我@cus = sort keys %cus;
的目标是什么?右侧的“cus”和左侧的“cus”是一样的吗?
my %cus = ();
for my $i ( 0 .. $#{$model->{in1}->{tra1}->{data}})
{
foreach my $cu (keys %{$model->{in1}->{tra1}->{data}->[$i]->{concept}}
{
$cus{$cu} = 1;
}
}
my @cus = sort keys %cus;
答案 0 :(得分:5)
1)
它们是不同哈希的关键,是的。
in1
用作$model
引用的哈希的键。tra1
用作$model->{in1}
引用的哈希的键。data
用作$model->{in1}->{tra1}
引用的哈希的键。2)
$#a
返回数组@a
的最后一个索引。所以
$#{ $ref }
(或简称为$#$ref
)返回@{ $ref }
(或简称为@$ref
)的最后一个索引,即$ref
引用的数组。 / LI>
所以
$#{ $model->{in1}->{tra1}->{data} }
返回@{ $model->{in1}->{tra1}->{data} }
的最后一个索引,$model->{in1}->{tra1}->{data}
引用的数组。3)
该语句对散列%cus
的键进行排序,并将它们放在数组@cus
中。不,%cus
和@cus
不是同一个变量。
“4”)
代码可以简化为:
my %cus;
my $data = $model->{in1}->{tra1}->{data};
for my $i (0 .. $#$data) {
for my $cu (keys %{ $data->[$i]->{concept} }) {
++$cus{$cu};
}
}
my @cus = sort keys %cus;
甚至:
my %cus;
for my $data_item (@{ $model->{in1}->{tra1}->{data} }) {
for my $cu (keys %{ $data_item->{concept} }) {
++$cus{$cu};
}
}
my @cus = sort keys %cus;
答案 1 :(得分:0)
是的,你已经有三个嵌套的哈希。
是的,$#{...}
部分表示"封闭数组的最大索引"。您还知道...->{data}
是一个(引用)数组,因为下一行有->{data}->[$i]
。
@cus
和%cus
是两个不同的变量,无关。
答案 2 :(得分:0)
在
$model->{in1}->{tra1}->{data}}
的结构中,“in1”,“tra1”和“data”都表示不同哈希结构级别的特定键。
是。如果不是这种情况,则会出现错误。
$#($model->{in1}->{tra1}->{data}}
是否代表数组?
不完全。它是数组中元素的数量(所以,是的,散列中的数据应该是一个数组)。
我
@cus = sort keys %cus;
的目标是什么?
它接受哈希表%cus
中的所有键,并按字母顺序将它们排序为新数组@cus
。
右侧的“cus”和左侧的“cus”是一样的吗?
没有。在Perl $cus
中,@cus
和%cus
是三个不同的变量。前缀表示类型。