com*_*ose 5 arrays iteration perl data-manipulation
以下代码是否始终在perl中运行?
for loop iterating over @array {
# do something
if ($condition) {
remove current element from @array
}
}
Run Code Online (Sandbox Code Playgroud)
因为我在Java中知道这导致了一些异常,上面的代码现在对我有用,但我想确保它适用于perl中的所有情况.谢谢
rai*_*7ow 12
好吧,它在文档中说:
如果LIST的任何部分是一个数组,如果在循环体内添加或删除元素,foreach将会非常困惑,例如使用splice.所以不要这样做.
每个都好一点:
如果在迭代时添加或删除哈希的元素,则可以跳过或复制条目 - 因此不要这样做.例外:在当前实现中,删除每个()最近返回的项始终是安全的,因此以下代码正常工作:
while (($key, $value) = each %hash) {
print $key, "\n";
delete $hash{$key}; # This is safe
}
Run Code Online (Sandbox Code Playgroud)
但我想这里最好的选择就是使用grep:
@some_array = grep {
# do something with $_
some_condition($_);
} @some_array;
Run Code Online (Sandbox Code Playgroud)