我想遍历一个数组并检查一些元素是否等于特定条件.例如,我想删除元素包含"O",所以我可以这样做..
@Array = ("Apple","Orange","Banana");
for ($i=0 ; $i <= $#Array ; $i++) {
if( index($Array[$i],"O") >= 0 ) {
splice(@Array,$i,1);
}
}
Run Code Online (Sandbox Code Playgroud)
但如果我想使用foreach循环来替换for循环,我该怎么办?因为在foreach循环中,没有索引所以我不能使用splice,除非我设置一个变量来存储它.
TLP*_*TLP 17
如果要删除元素,更好的工具是grep:
@array = grep { !/O/ } @array;
Run Code Online (Sandbox Code Playgroud)
从技术上讲,可以使用for循环,但是你必须通过一些箍来完成它,或者复制到另一个数组:
my @result;
for (@array) {
if (/O/) {
push @result, $_;
}
}
Run Code Online (Sandbox Code Playgroud)
你应该知道for并且foreach是别名,他们做同样的事情.您正在考虑的是C风格的语法:
for (@array) { print $_, "\n"; } # perl style, with elements
for (my $x = 0; $x <= $#array; $x++) { # C-style, with indexes
print $array[$x], "\n";
}
Run Code Online (Sandbox Code Playgroud)