我有数组,我想执行一个使用两个邻居元素修改元素内容的操作。我不认为map
运营商是合适的。例如:如果abs(element1-element2) <= 2
my @arr = (0, 3, 5, 6, 9, 1, 1);
my @outarr = magic(@arr);
for(@outarr)
{
print "$_ ";
}
我希望输出为:0 5 9 1
有没有办法通过map
或grep
运营商的优雅来做到这一点?
答案 0 :(得分:0)
使用状态变量迭代数组以构建新数组:
use strict;
use warnings;
my @arr = ( 0, 3, 5, 6, 9, 1, 1 );
my @outarr;
my $lastval;
for (@arr) {
if ( !defined $lastval ) {
$lastval = $_;
} elsif ( abs( $lastval - $_ ) > 2 ) {
push @outarr, $lastval;
$lastval = $_;
} else {
$lastval = ( $lastval + $_ ) / 2;
}
}
push @outarr, $lastval if defined $lastval;
print "@outarr\n";
输出:
0 5 9 1