5

以下代码将始终在 perl 中工作吗?

for loop iterating over @array {
  # do something
  if ($condition) {
     remove current element from @array
  }
}

因为我知道在 Java 中这会导致一些异常,所以上面的代码现在对我有用,但我想确保它适用于 perl 中的所有情况。谢谢

4

1 回答 1

12

好吧,文档中说:

如果 LIST 的任何部分是一个数组,如果你在循环体中添加或删除元素,foreach 将变得非常混乱,例如使用 splice。所以不要那样做。

每个都好一点:

如果您在迭代散列时添加或删除它的元素,条目可能会被跳过或重复——所以不要这样做。例外:在当前实现中,删除 each() 最近返回的项目总是安全的,因此以下代码可以正常工作:

 while (($key, $value) = each %hash) {
    print $key, "\n";
    delete $hash{$key}; # This is safe
  }

但我想这里最好的选择就是使用grep

@some_array = grep {
  # do something with $_
  some_condition($_);
} @some_array;
于 2013-06-03T10:56:45.893 回答