我怎样才能让它更简单?
@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')
答案 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