关于以下代码段,我想知道我对几个问题的理解是否正确?

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;

09-12 20:21