Как очистить массив

34
There’s more than one way to очистить массив

description

Подборка смешных способов очистки массива в перле.

Transcript of Как очистить массив

Page 1: Как очистить массив

There’s more

than one way toочистить массив

Page 2: Как очистить массив

В проектна перле

Page 3: Как очистить массив

Нанялипрограммиста

Delphi/SQL

Page 4: Как очистить массив

Ведь если программист

хороший,

Page 5: Как очистить массив

он пишет хорошона любом языке, да?

Page 6: Как очистить массив

Да

Page 7: Как очистить массив

Но ржачно

Page 8: Как очистить массив

sub clear{   my $template = shift @args;   @{$self->{tokens}} = ();   foreach (map {$_->{name}} @{$template->{si}}){       while (my $r = shift @{$self->{$_}->{res}}){}   }}

Page 9: Как очистить массив

Что за..?*

* WTF? (Russian)

Page 10: Как очистить массив

sub clear{   my $template = shift @args;   @{$self->{tokens}} = ();   foreach (map {$_->{name}} @{$template->{si}}){       while (my $r = shift @{$self->{$_}->{res}}){}   }}

Это подпрограмма для очистки объекта

Page 11: Как очистить массив

sub clear{   my $template = shift @args;   @{$self->{tokens}} = ();   foreach (map {$_->{name}} @{$template->{si}}){       while (my $r = shift @{$self->{$_}->{res}}){}   }}

Посмотрите на это

Page 12: Как очистить массив

Я отправил примерв рассылку Moscow.pm

Page 13: Как очистить массив

И понеслось

Page 14: Как очистить массив

while (my $r = shift @a) {}

1

Page 15: Как очистить массив

splice @a;

2

Page 16: Как очистить массив

delete(@a[0..$#a]);

3

Page 17: Как очистить массив

grep {shift @a} @a;

4

Page 18: Как очистить массив

@a = ();

5

Page 19: Как очистить массив

@a = ();

5

Скукотища!

Page 20: Как очистить массив

undef @a;

6

Page 21: Как очистить массив

ccn@ccn-laptop ~$ perl -le 'my @a=(1,2,3); while(my $r = shift @a){}; print @a'

ccn@ccn-laptop ~$ perl -le 'my @a=(0,1,2,3); while(my $r = shift @a){}; print @a'123

Page 22: Как очистить массив

while(defined(my $r = shift @a)){}

7

Page 23: Как очистить массив

ccn@ccn-laptop ~$ perl -le 'my @a=(undef,1,2,3);while(defined(my $r=shift @a)){};print @a'123

Page 24: Как очистить массив

Не работает

Page 25: Как очистить массив

Извлекаем пользу

Page 26: Как очистить массив

$str = "abc\c{0}def";@a = split //, $str;$c++ while(shift @a);say $c - 1;

Вычисление длины строкис завершающим нулем

Page 27: Как очистить массив

while(chomp $str) {};

8

Page 28: Как очистить массив

while(@a) {shift @a}

9

Page 29: Как очистить массив

shift @a while @a;

10

Уже лучше!

Page 30: Как очистить массив

shift @a while @a and die;

11

Page 31: Как очистить массив

shift @a while scalar @a;

12

Page 32: Как очистить массив

$#a = -1

13

Кто помнит, что так можно?!

Page 33: Как очистить массив

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 @awhile @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%

Benchmarked

Page 34: Как очистить массив

TIMTOWTDI or die;

Андрей Шитов

talks.shitov.ru | [email protected]