[Moscow.pm] Как очистить массив
Mons Anderson
mons на cpan.org
Вс Май 30 06:05:25 PDT 2010
Странно спорить на голом месте.
вот бенчмарк.
use Benchmark qw(:all :hireswallclock);
my $size = 1000;
cmpthese timethese -3, {
'@a = ...' => sub { my @a = (('test')x$size);
return; },
'undef @a' => sub { my @a = (('test')x$size); undef @a;
return; },
'@a=()' => sub { my @a = (('test')x$size); @a = ();
return; },
'splice @a' => sub { my @a = (('test')x$size); splice @a;
return; },
'$#a = -1' => sub { my @a = (('test')x$size); $#a = -1;
return; },
'shift @a while @a' => sub { my @a = (('test')x$size); shift @a
while @a; return; },
'delete @a[0..#$a]' => sub { my @a = (('test')x$size);
delete(@a[0..$#a]); return; },
};
при $size=1000;
shift @a while @a 2642/s -- -22% -44%
-44% -45% -45% -45%
delete @a[0..#$a] 3376/s 28% -- -28%
-29% -29% -30% -30%
splice @a 4722/s 79% 40% --
-0% -1% -2% -2%
undef @a 4745/s 80% 41% 0%
-- -1% -2% -2%
@a=() 4781/s 81% 42% 1%
1% -- -1% -1%
$#a = -1 4834/s 83% 43% 2%
2% 1% -- -0%
@a = ... 4834/s 83% 43% 2%
2% 1% 0% --
при $size = 100;
shift @a while @a 25428/s -- -27% -43%
-45% -46% -47% -47%
delete @a[0..#$a] 34689/s 36% -- -23%
-25% -27% -27% -28%
$#a = -1 44823/s 76% 29% --
-4% -5% -6% -6%
splice @a 46547/s 83% 34% 4%
-- -2% -2% -3%
undef @a 47424/s 87% 37% 6%
2% -- -1% -1%
@a=() 47669/s 87% 37% 6%
2% 1% -- -0%
@a = ... 47908/s 88% 38% 7%
3% 1% 1% --
при $size=10;
shift @a while @a 206027/s -- -20%
-32% -40% -42% -42% -45%
delete @a[0..#$a] 257112/s 25% --
-15% -26% -28% -28% -31%
$#a = -1 302268/s 47% 18%
-- -13% -15% -15% -19%
splice @a 345669/s 68% 34%
14% -- -3% -3% -8%
@a=() 355783/s 73% 38%
18% 3% -- -0% -5%
undef @a 356498/s 73% 39%
18% 3% 0% -- -5%
@a = ... 374747/s 82% 46%
24% 8% 5% 5% --
итого:
правильные способы:
@a = ();
$#a = -1;
undef @a;
splice @a;
они различаются на проценты и вобщем-то при разных запусках могут
меняться местами.
shift while и delete - crap.
--
Best wishes,
Vladimir V. Perepelitsa aka Mons Anderson
<inthrax на gmail.com>, <mons на cpan.org>
Подробная информация о списке рассылки Moscow-pm