【发布时间】:2012-05-16 06:28:39
【问题描述】:
遍历 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 ;
【问题讨论】:
-
为什么会有“最佳”?特别是考虑到我们不知道您将如何衡量一个与另一个(速度比内存使用更重要?是
map和可接受的答案?等等) -
你发布的三个中有两个会让我去“WTH?!”除非有额外的周围环境使它们成为明智的选择。无论如何,这个问题属于“两个数字相加最好的方法是什么?”大多数时候,只有一种方法。然后,在某些情况下,您需要一种不同的方式。投票结束。
-
@SinanÜnür 我赞同你的观点(只有一种方法可以将两个数字相加),但是这个类比不够强,不能轻视。显然,方法不止一种,OP 想要了解什么是好主意,什么不是。
-
Programming Perl 第三版的第 24 章有一节关于效率的内容值得一读。它解决了不同类型的效率,例如时间、程序员、维护者。该部分以“请注意,优化时间有时可能会降低空间或程序员效率的成本(由下面的冲突提示表示)开始。他们是休息时间。”
-
两个数字相加的一种方法?如果您研究较低级别的调用/实现,则不会……考虑进行前瞻,进行保存加法器等。