关于perl程序的几个问题
关于以下代码段,我想知道我对几个问题的理解是否正确 1) 在关于perl程序的几个问题,perl,Perl,关于以下代码段,我想知道我对几个问题的理解是否正确 1) 在$model->{in1}->{tra1}->{data}}的结构中,“in1”、“tra1”和“data”都表示散列结构不同级别的特定键 2) ${$model->{in1}->{tra1}->{data}}是否表示数组 3) 我的@cus=排序键%cus目标是什么?右边的“cus”和左边的“cus”是一样的吗 my %cus = (); for my $i ( 0 .. $#{$model->{in1}->{tra1}-
$model->{in1}->{tra1}->{data}}
的结构中,“in1”、“tra1”和“data”都表示散列结构不同级别的特定键
2) ${$model->{in1}->{tra1}->{data}}
是否表示数组
3) 我的@cus=排序键%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;
是的,你有三个深度的嵌套散列
是的,$#{…}
部分表示“封闭数组的最大索引”。您还知道,..->{data}
是一个(对一个)数组的引用,因为下一行的->{data}->[$i]
@cus
和%cus
是两个不同的变量,不相关
在$model->{in1}->{tra1}->{data}}
的结构中,“in1”、“tra1”和“data”都表示散列结构不同级别的特定键
对。如果不是这样,就会出现错误
$#($model->{in1}->{tra1}->{data}}
表示数组吗
不完全是。它是数组中的元素数(因此,是的,散列中的数据应该是数组)
我的@cus=排序键%cus;
的目标是什么
它从哈希表%cus
中获取所有键,并按字母顺序将它们排序到一个新数组@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;
否。在Perl$cus
中,@cus
和%cus
是三个不同的变量。前缀表示类型。1)
是的,它们是不同散列的键
- in1
中的用作$model
引用的哈希的键
tra1
用作$model->{in1}
引用的哈希的键
data
用作$model->{in1}->{tra1}
引用的哈希的键
(二)
$\a
返回数组@a
的最后一个索引
所以
${$ref}
(简称${$ref
)返回@{$ref}
(简称@$ref
)所引用数组的最后一个索引
所以
${$model->{in1}->{tra1}->{data}
返回{$model->{in1}->{tra1}->{data}
引用的数组的最后一个索引
(三)
该语句对哈希%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;
修复了不匹配的brakets$#(…}
和%(…}
“它是数组中的元素数”不完全是数组中最后一个元素的索引(通常比元素数少一个)。