关于以下代码段,我想知道我对几个问题的理解是否正确?
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;
最佳答案
1)
是不同哈希值的关键,是的。in1
用作$model
引用的哈希的键。tra1
用作$model->{in1}
引用的哈希的键。data
用作$model->{in1}->{tra1}
引用的哈希的键。
2)$#a
返回数组@a
的最后一个索引。
所以$#{ $ref }
(或简称为$#$ref
)返回@{ $ref }
(或简称为@$ref
)的最后一个索引,即由$ref
引用的数组。
所以$#{ $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;