- RU.PERL ----------------------------------------------------------- RU.PERL - Msg : #3521 [639] От : Mikhail Polykovsky 2:5020/400 11 мая 04, 08:58 Кому : Artem Chuprina 11 мая 04, 22:01 Тема : Re[2]: Проверка на вхождение в массив ------------------------------------------------------------------------------- From: Mikhail PolykovskyMP>> Вдогонку: я не подумал о том, что может понадобиться несколько раз MP>> проверять вхождение элемента в один и то же массив. У меня такой MP>> задачи не было, массивы были все время разными. AC> А в случае с разными массивами ты мог бы быть в курсе о наличии функции AC> grep() Может, ты вот это имел в виду? =============================== 1.pl ================================ use Benchmark qw(cmpthese); $x = '1'; @arr = qw(3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3 3 4 5 6 2 5 6 1 2 3); cmpthese(100000, { 'arr' => sub { in_arr($x, \@arr) }, 'hash' => sub { in_hash($x, \@arr) }, 'ret' => sub { in_ret($x, \@arr) }, }); sub in_arr{ my $item = shift; my $arr = shift; for (@$arr){ return 1 if $item eq $_; } return 0; } sub in_hash{ my $item = shift; my $arr = shift; my %hash = map {$_ => 1} @$arr; return exists $hash{$item}; } sub in_ret{ my $item = shift; my $arr = shift; grep {return $_ if $_ eq $item} @$arr; } ===================================================================== Benchmark: timing 100000 iterations of arr, hash, ret... arr: 1 wallclock secs ( 0.61 usr + 0.00 sys = 0.61 CPU) @ 163934.43/s (n=100000) hash: 80 wallclock secs (78.09 usr + 0.03 sys = 78.13 CPU) @ 1280.00/s (n=100000) ret: 1 wallclock secs ( 0.61 usr + 0.00 sys = 0.61 CPU) @ 164203.61/s (n=100000) Rate hash arr ret hash 1280/s -- -99% -99% arr 163934/s 12707% -- -0% ret 164204/s 12728% 0% -- ===================================================================== Если нет, объясни плз. -- Михаил Полыковский http://copi.ru/27690/ Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru --- ifmail v.2.15dev5.3 * Origin: UTC (2:5020/400)