关于以下代码段,我想知道我对几个问题的理解是否正确?
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;
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
甚至:
my %cus;
for my $data_item (@{ $model->{in1}->{tra1}->{data} }) {
for my $cu (keys %{ $data_item->{concept} }) {
++$cus{$cu};
}
}
my @cus = sort keys %cus;
Run Code Online (Sandbox Code Playgroud)