在Perl中是否可以使用位置的另一个数组位置转换数组?

时间:2013-02-08 12:07:04

标签: arrays perl transformation

我有一个值数组,我想使用另一个数组进行转换,如此

@raw_values      = qw(10 20 30 40);

@adjustment_factors = qw(1 2 3 4);


#the expected value array
@expected_values    = qw(10 40 90 160);

这样做会有更好的方式吗?

for my $n (0..$#raw_values){
    $expected_values[ $n ] = $raw_values[ $n ] * $adjustment_factors[ $n ]
}

数组总是具有相同数量的元素,我有几千个要处理。

2 个答案:

答案 0 :(得分:4)

使用map

@expected_values = map { $raw_values[$_] * $adjustment_factors[$_] } 0 .. $#raw_values;

另一个选择是首先分配原始值然后修改它们:

@expected_values = @raw_values;
$x = 0;
$_ *= $adjustment_factors[$x++] for @expected_values;

或者,如果您不再需要@adjustment_factors,则可以将其清空:

@expected_values = map { $_ * shift @adjustment_factors } @raw_values;

答案 1 :(得分:3)

pairwise是更惯用的CPAN解决方案。

use List::MoreUtils qw<pairwise>;

my @expected_values = pairwise { $a * $b } @raw_values, @adjustment_factors;

请参阅List::MoreUtils