我有一个值数组,我想使用另一个数组进行转换,如此
@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 ]
}
数组总是具有相同数量的元素,我有几千个要处理。
答案 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)
use List::MoreUtils qw<pairwise>;
my @expected_values = pairwise { $a * $b } @raw_values, @adjustment_factors;