[Cascavel-pm] Somar elementos numericos de um array

Flavio S. Glock fglock em gmail.com
Terça Abril 10 05:29:25 PDT 2007


Em 10/04/07, Igor Sutton Lopes<igor.sutton em gmail.com> escreveu:
> Oi,
>
> On Apr 10, 2007, at 8:12 AM, Luis Motta Campos wrote:
>
> > Aqui tem uma sugestão
> > genérica, que é complicada de ler, não serve para código de produção
> > mas é educativa.
> >
[...]
> O resultado:
>
>            Rate  eval   for   map   sum
> eval   28528/s    --  -93%  -94%  -99%
> for   399865/s 1302%    --  -14%  -85%
> map   464529/s 1528%   16%    --  -83%
> sum  2738845/s 9500%  585%  490%    --
>

Não subestime o eval - dependendo como você usá-lo ele pode ser muito
rápido (e evita o uso de XS em alguns casos):

          Rate  for  map eval  sum
for   365652/s   -- -13% -78% -86%
map   421556/s  15%   -- -74% -83%
eval 1633707/s 347% 288%   -- -36%
sum  2540158/s 595% 503%  55%   --

----

use strict;
use warnings;

use List::Util qw(sum);
use Benchmark qw(:all);

my @numbers = ( 1 .. 10 );

cmpthese(
    -3,
    {
        'map' => sub {
            my $result;
            map { $result += $_ } @numbers;
        },
        'for' => sub {
            my $result;
            $result += $_ for @numbers;
        },
        'sum' => sub {
            my $result = sum(@numbers);
        },
        'eval' => eval 'sub {
            local $" = "+";
            my $result;
            $result = '. em numbers.';
          }',
    }
);

----

- Flavio S. Glock


Mais detalhes sobre a lista de discussão Cascavel-pm