Quelle est la meilleure implémentation (en termes de vitesse et d'utilisation de la mémoire) pour itérer dans un tableau Perl ? Existe-t-il une meilleure méthode ? ( @Array
ne doit pas être retenu).
Mise en œuvre 1
foreach (@Array)
{
SubRoutine($_);
}
Mise en œuvre 2
while($Element=shift(@Array))
{
SubRoutine($Element);
}
Mise en œuvre 3
while(scalar(@Array) !=0)
{
$Element=shift(@Array);
SubRoutine($Element);
}
Mise en œuvre 4
for my $i (0 .. $#Array)
{
SubRoutine($Array[$i]);
}
Mise en œuvre 5
map { SubRoutine($_) } @Array ;
2 votes
Pourquoi y aurait-il un "meilleur" ? D'autant plus que nous n'avons aucune idée de la manière dont vous pourriez mesurer l'un par rapport à l'autre (la vitesse est-elle plus importante que l'utilisation de la mémoire ?
map
et réponse acceptable ?. etc.)2 votes
Deux des trois que vous avez affichés me feraient dire "WTH ?!" à moins qu'il n'y ait un contexte environnant supplémentaire pour en faire des alternatives raisonnables. Dans tous les cas, cette question se situe au niveau de " Quelle est la meilleure façon d'additionner deux nombres ? " La plupart du temps, il n'y a qu'une seule solution. Puis, il y a ces circonstances, où vous avez besoin d'un moyen différent. Vote de clôture.
4 votes
@SinanÜnür Je comprends votre opinion (qu'il n'y a qu'une seule façon d'additionner deux nombres), mais l'analogie n'est pas assez forte pour être utilisée avec dédain. De toute évidence, il y a plus d'une façon de faire, et le PO veut comprendre ce qui est une bonne idée et ce qui ne l'est pas.
2 votes
Le chapitre 24 de la troisième édition de Programming Perl contient une section sur l'efficacité qu'il est bon de lire. Elle aborde les différents types d'efficacité tels que le temps, le programmeur, le mainteneur. La section commence par l'affirmation suivante : "Notez que l'optimisation du temps peut parfois vous coûter en espace ou en efficacité du programmeur (indiqué par des conseils contradictoires ci-dessous). Ce sont les ruptures".
1 votes
Une seule façon d'additionner deux nombres ? Pas si vous regardez les appels / implémentations de plus bas niveau.... pensez à carry lookahead, aux additionneurs carry save, etc.