哪个是最好的实现(在速度和内存使用方面)迭代Perl数组?有什么更好的方法吗? (@Array不需要保留)。
实施1
foreach (@Array) { SubRoutine($_); }
实施2
while($Element=shift(@Array)) { SubRoutine($Element); }
实施3
while(scalar(@Array) !=0) { $Element=shift(@Array); SubRoutine($Element); }
实施4
for my $i (0 .. $#Array) { SubRoutine($Array[$i]); }
实施5
map { SubRoutine($_) } @Array ;
解决方法
>在速度方面:#1和#4,但在大多数情况下不是太多。
你可以写一个基准来确认,但我怀疑你会发现#1和#4稍快,因为迭代工作是在C而不是Perl完成,不会发生不必要的复制数组元素。 ($ _别名为#1中的元素,但#2和#3实际上从数组中复制标量。)
#5可能类似。
>在内存使用:它们都是相同的,除了#5。
for(@a)是特殊情况下,以避免平铺数组。循环遍历数组的索引。
>在可读性方面:#1。
>在灵活性方面:#1 /#4和#5。
#2不支持为false的元素。 #2和#3是破坏性的。