0

我有一个值数组,我想使用另一个数组进行转换,就像这样

@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 ]
}

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

4

2 回答 2

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;
于 2013-02-08T12:25:29.130 回答
3

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

use List::MoreUtils qw<pairwise>;

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

List::MoreUtils

于 2013-02-08T13:24:34.320 回答