/ / In Perl, jak mogę sprawdzić krok między elementami tablicy? [zamknięty] - perl

W Perlu, jak mogę sprawdzić krok między elementami tablicy? [zamknięty] - perl

Powiedzmy, że mam tablicę, która wygląda następująco:

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

Jak uzyskać tablicę kroków między poszczególnymi elementami:

@var_steps = ( 58, 61, 61 );

Wiem, że mógłbym użyć iteratora do tego przy użyciu i i i + 1 dla każdego indeksu, ale czy istnieje lepszy sposób?

Odpowiedzi:

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

lub

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

0 dla odpowiedzi nr 2

Znalazłem rozwiązanie z map w porządku, ale oto inne spojrzenie na to. Z funkcją pomocnika:

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;
}

Możesz uzyskać sąsiadujące różnice w ten sposób:

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