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;

もう 1 つのオプションは、最初に元の値を割り当ててから変更することです。

@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 に答える