Perl-转换匿名数组
我可以操作单个数组元素,并将对数组的引用作为值添加到哈希中。容易的例如,这可以实现预期的结果:Perl-转换匿名数组,perl,Perl,我可以操作单个数组元素,并将对数组的引用作为值添加到哈希中。容易的例如,这可以实现预期的结果: # split the line into an array my @array = split; # convert the second element from hex to dec $array[1] = hex($array[1]); # now add the array to a hash $hash{$name}{ ++$count{$name} } = \@array; 我的问
# split the line into an array
my @array = split;
# convert the second element from hex to dec
$array[1] = hex($array[1]);
# now add the array to a hash
$hash{$name}{ ++$count{$name} } = \@array;
我的问题是:是否可以使用匿名数组执行相同的操作?我可以通过以下操作接近目标:
$hash{$name}{ ++$count{$name} } = [ split ];
但是,这不会操作匿名数组的第二个索引转换hex到dec。如果可以,怎么做?你要求的是这个
my $array = [ split ];
$array->[1] = hex($array->[1]);
$hash{$name}{ ++$count{$name} } = $array;
但这可能不是你的意思
此外,与使用顺序编号的散列键相比,使用数组散列可能更好,如下所示
my $array = [ split ];
$array->[1] = hex($array->[1]);
push @{ $hash{$name} }, $array;
您需要一种访问数组的方法来说出您想要修改的内容,但您可以在将其推到哈希上后对其进行修改,如下所示:
push @{ $hash{$name} }, [split];
$hash{$name}[-1][1] = hex($hash{$name}[-1][1]);
虽然那真的不是很好。或者你可以
push @{ $hash{$name} }, do {
my @array = [split];
$array[1] = hex($array[1]);
\@array;
};
甚至
for ([split]) {
$_->[1] = hex($_->[1]);
push @{ $hash{$name} }, $_;
}
你要的是这个
my $array = [ split ];
$array->[1] = hex($array->[1]);
$hash{$name}{ ++$count{$name} } = $array;
但这可能不是你的意思
此外,与使用顺序编号的散列键相比,使用数组散列可能更好,如下所示
my $array = [ split ];
$array->[1] = hex($array->[1]);
push @{ $hash{$name} }, $array;
您需要一种访问数组的方法来说出您想要修改的内容,但您可以在将其推到哈希上后对其进行修改,如下所示:
push @{ $hash{$name} }, [split];
$hash{$name}[-1][1] = hex($hash{$name}[-1][1]);
虽然那真的不是很好。或者你可以
push @{ $hash{$name} }, do {
my @array = [split];
$array[1] = hex($array[1]);
\@array;
};
甚至
for ([split]) {
$_->[1] = hex($_->[1]);
push @{ $hash{$name} }, $_;
}
谢谢你,博罗丁。我想我的问题是,$array也可以是匿名的吗?我现在明白了,这不可能。我也会执行你的建议。干杯。$array是对匿名数组的引用;这有用吗?你可以做$hash{$name}{++$count{$name}}=map[$\->[0],hex$\->[1],@$\[2..$$\]],[split];但这将是愚蠢的:在这个主题上还有另一个变体:$hash{$name}{++$count{$name}}=map{$\>[1]=hex$\>[1];$\}[split][0];哦,哎呀,你是对的,映射周围需要[0]或$hash{$name}{++$count{$name}}周围的parens使其成为一个列表分配所有imran和ysth的选项都是将数组引用存储在$\中,而不是显式的$array。谢谢你。我想我的问题是,$array也可以是匿名的吗?我现在明白了,这不可能。我也会执行你的建议。干杯。$array是对匿名数组的引用;这有用吗?你可以做$hash{$name}{++$count{$name}}=map[$\->[0],hex$\->[1],@$\[2..$$\]],[split];但这将是愚蠢的:在这个主题上还有另一个变体:$hash{$name}{++$count{$name}}=map{$\>[1]=hex$\>[1];$\}[split][0];哦,哎呀,你是对的,映射周围需要[0]或$hash{$name}{++$count{$name}}周围的parens使其成为列表分配所有imran和ysth的选项都是将数组引用存储在$\中,而不是显式的$array中。