/ / Perlでは、配列要素間のステップをどのように確認できますか? [閉じる] - perl

Perlでは、配列要素間のステップをどうやって確認できますか? [閉じる] - perl

次のような配列があるとします。

@var = ( 1, 59, 120, 181 );

どのようにして各要素の間に一連のステップを得ることができますか?

@var_steps = ( 58, 61, 61 );

私はイテレータを使ってこれを行うことができることを知っています i そして i + 1 各インデックスについて、より良い方法がありますか?

回答:

回答№1は4
my @var = ( 1, 59, 120, 181 );
my @var_steps = map { $var[$_+1] - $var[$_] } 0 .. $#var-1;

または

use List::MoreUtils qw(pairwise);
my @a1 = @var[0..$#var-1];
my @a2 = @var[1..$#var];
my @var_steps = pairwise { $b - $a } @a1, @a2;

回答№2の場合は0

私は map さて、もう一度見てみましょう。ヘルパー関数を使用すると:

sub zip_with(&@@) {
my ($f, $xs, $ys) = @_;
my @zs;

my $min = @$xs < @$ys ? @$xs : @$ys;
for my $i (0 .. $min - 1) {
push @zs, &$f($$xs[$i], $$ys[$i]);
}
return @zs;
}

次のような隣接する違いを得ることができます:

my @var_steps = zip_with { $_[1] - $_[0] } @vars, @vars[1..$#vars];