2010-11-24 39 views
5

我有一个包含一组元素的数组。元素的顺序是不相关的 - 我使用一个数组,因为它是我在Perl中知道的最简单的数据结构。在Perl中删除数组元素的“正确”方法是什么?

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

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

这里的最佳做法是什么?

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

+0

的可能重复[什么是删除从Perl中的数组值的最佳方法?(http://stackoverflow.com/questions/174292/什么 - 是最最好的方式到删除-a值从 - 一个阵列式-perl的) – 2014-04-10 20:53:10

回答

7

你用grep的想法是好的

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

根据文档,在数组值上调用delete已被弃用,并可能在未来版本的Perl中被删除。

或者,你可以建立索引所需的列表和切片分配给原始数组:

@arr = @arr[ @indices ]; 

您可以在perldata阅读更多关于切片。

相关问题