- RU.PERL ----------------------------------------------------------- RU.PERL -
Msg : #3565 [639]
От : Yuriy Kaminskiy 2:5020/517.21 16 мая 04, 02:14
Кому : Serge Chervjakov 17 мая 04, 21:48
Тема : Re: Проверка на вхождение в массив
-------------------------------------------------------------------------------
@RFC-NNTP-Posting-Date: 15 May 2004 22:14:56 GMT
Hello, Serge!
>>>>> On 00:19 16/5/2004, Serge Chervjakov wrote to Artem Chuprina:
SC> sub f {
SC> my @mas=(1..10000); my %hash; for (my $i=0; $i<10000; $i++) {
SC> $hash{$mas[$i]}=$mas[$i];
SC> }
SC> }
SC> тут с бенчмарком комбинация проводится...
Hда. Это называется клиника. Hу какой-же
[нецензурщина ещё на три экрана поцокана цензором] так кодирует...
ВСПОМHИ! PERL - ЭТО HЕ C++! ТУТ ЦИКЛЫ ПО МАССИВАМ ТАК HЕ ПИШУТ!
"Правильный" for:
for(@mas) { $hash{$_} = () }
или (чуть похуже)
for(@mas) { $hash{$_} = 1 }
или уж накрайняк
for(@mas) { $hash{$_} = $_ }
если так уж хочется сравнить один-в-один с map {$_, $_} @mas.
И увидишь, что результат ровно противоположный - for _быстрее_ от
восьми (!) раз (на perl-5.00404/single/single/static) до двух раз (на
5.8.1/mthread/mobject/shared - на нём случай map-с-resize заметно
оптимизировали).
Впрочем, у @hash{@slice} всё равно толще - он в те же полтора-два раза
быстрее, чем for (и, в 27 (или, соответственно, в шесть) раз быстрее,
чем дурацкий map).
SC> и проверить не могу - перл не могу поставить - оперативка
SC> побилась, глюки страшные идут:((.
У *кого* оперативка-то побилась?
ВСПОМHИ! PERL - ЭТО HЕ C++! ТУТ ЦИКЛЫ ПО МАССИВАМ ТАК HЕ ПИШУТ!
--
Yuriy Kaminskiy.
E-mail (rot13): lhevl.z.xnzvafxvl@zgh-arg.eh
--- Gnus/5.1002 (Gnus v5.10.2) XEmacs/21.5 (chayote, linux)
* Origin: Code is language! http://www.anti-dmca.org (2:5020/517.21@fidonet)