perl,从for循环中的数组中删除元素

时间:2013-06-03 10:49:23

标签: arrays perl iteration data-manipulation

以下代码是否始终在perl中运行?

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

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

1 个答案:

答案 0 :(得分:12)

嗯,据说doc

  

如果LIST的任何部分是一个数组,如果你,foreach将会非常困惑   添加或删除循环体内的元素,例如使用拼接。   所以不要这样做。

each

更好一些
  

如果在迭代时添加或删除哈希的元素,   条目可能会被跳过或重复 - 所以不要这样做。例外:在   当前的实现,最常删除项目总是安全的   最近由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;