Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl-转换匿名数组_Perl - Fatal编程技术网

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中。