合并并替换两个数组元素

时间:2017-01-28 11:56:53

标签: perl

我怎样才能让它更简单?

@array= ('a','s','v','b','s','v','s','f','v');
$i= 0;
$maxarray= @array;
while ($i<$maxarray-1) {
    if (($array[$i] eq 's') && ($array[$i+1] eq 'v')) {
        splice (@array, $i, 1);
        $array[$i]= 'vs';
    } else { # if
        $i++;
    } # if
    $maxarray= @array;
} # while

输出:(将('s','v')替换为('vs')

2 个答案:

答案 0 :(得分:3)

您可以使用splice替换数组中间的两个元素:

my $i = 0;
while ($i < $#array) {
    splice @array, $i, 2, 'vs'
        if 's' eq $array[$i] && 'v' eq $array[ $i + 1 ];
    $i++;
}

如果你知道数组不能包含一个字符(例如!)并且每个元素只是一个字符,你可以将join数组转换为字符串并使用替换来做工作:

my $str = join '!', @array;
$str =~ s/s!v/vs/g;
@array = split /!/, $str;

答案 1 :(得分:1)

你可以用另一种方式完全使用字符串替换

@array = split ' ', "@array" =~ s/s v/vs/gr;

输出

a vs b vs s f v