关于perl程序的一些问题
关于下面的代码段,我想知道我对几个问题的理解是否正确? 1)在$model->{in1}->{tra1}->{data}}
的结构中,“in1”,“tra1”和“data”都表示不同级别散列结构的特定键。关于perl程序的一些问题
2)$#{$model->{in1}->{tra1}->{data}}
代表一个数组吗?我的@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;
是的,你有嵌套的哈希深三。
是的,
$#{...}
部分表示“封闭阵列的最大索引”。你也知道...->{data}
是一个(引用一个)数组,因为下一行是->{data}->[$i]
。@cus
和%cus
是两个不同的变量,无关。
在
$model->{in1}->{tra1}->{data}}
的结构中,“IN1”,“TRA1”和“数据”全部表示在不同水平的散列结构的特定按键。
是的。如果情况并非如此,则会出现错误。
$#($model->{in1}->{tra1}->{data}}
表示数组吗?
不完全。它是数组中元素的数量(所以,散列中的数据应该是数组)。
我的
@cus = sort keys %cus;
的目的是做什么?
它从散列表%cus
中获取所有密钥,并按字母顺序将它们排序到一个新数组中@cus
。
右边的“cus”和左边的“cus”是同一个东西吗?
号在Perl $cus
,@cus
%cus
和三种不同的变量。前缀表示类型。
“它是一个数组中元素的数量”不是它是数组中最后一个元素的索引(它通常比元素的数量少一个)。 – 2012-02-13 15:59:26
固定不匹配的brakets'$#(...}'和'% (...} – ikegami 2012-02-13 03:18:00