执行涉及数组中相邻元素的操作的最简单方法

时间:2014-11-02 09:36:25

标签: arrays perl

我有数组,我想执行一个使用两个邻居元素修改元素内容的操作。我不认为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

有没有办法通过mapgrep运营商的优雅来做到这一点?

1 个答案:

答案 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