在Perl中删除数组元素的“正确”方法是什么?

时间:2010-11-24 14:34:58

标签: arrays perl

我有一个包含一组元素的数组。元素的顺序是无关紧要的 - 我使用数组,因为它是我在Perl中知道的最简单的数据结构。

my @arr = ...
while (some condition) {
    # iterate over @arr and remove all elements which meet some criteria
    # (which depends on $i)
}

我知道splice(),但我认为在迭代时使用它并不好。数组元素的delete似乎已弃用。也许在grep上使用@arr进入自己(@arr = grep {...} @arr)?

这里的最佳做法是什么?

也许使用哈希(虽然我真的不需要它)?

2 个答案:

答案 0 :(得分:7)

根据文档,不推荐在数组值上调用delete,并且可能会在将来的Perl版本中删除。

或者,您可以构建所需索引的列表并将切片分配给原始数组:

@arr = @arr[ @indices ];

您可以在perldata中了解有关切片的更多信息。

答案 1 :(得分:7)

你使用grep的想法很好

@arr = grep { cond($i++); } @arr;