|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Vlad 2:5020/400 20 Nov 2002 21:38:45 To : Artem Chuprina Subject : Re[2]: map и foreach -------------------------------------------------------------------------------- Hello Artem, Wednesday, November 20, 2002, 5:55:03 PM, you wrote: AC> Здравствуй, Vlad. V>> Кто может подсказать, почему map работает медленнее прямого перебора V>> массива? AC> Потому что он генерирует новый список. А то, что тебе результат не нужен, AC> для него не аргумент. Хорошо. А почему тогда, если вместо map использовать grep в той же конструкции, работает быстрее чем оба варианта (map и прямой перебор)? Попробуйте сравнить с примерами из предыдущего поста: my %words_2 = (); my $t2 = [gettimeofday]; grep {$words_2{$_}++}@words; print "grep:\t",tv_interval($t2, [gettimeofday]), " sec.\n"; Правильно. Разница с simple составляет примерно полтора раза. :) Почему так, понять не могу. Ведь grep тоже, насколько мне известно, возвращает список. И вообще, если записать @arr = map{$words{$_}++}@words, то map работает как раз в те самые полтора раза быстрее, чем без присваивания массиву, в то время как grep в таком же случае начинает работать медленней (не поверите!) приблизительно в те же полтора раза. Вот такие хитрые сообщающиеся сосуды... Hа маленьких объемах, конечно, не заметна разница в скорости, но вот если индексировать десятки мегабайт текста, тогда выливается в минуты, а то и в десятки минут. Хочется докопаться до истины, так как многократное перечитывание документация ясности не внесло. -- Best regards, VLAD mailto:vlad@niko.kiev.ua Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru --- ifmail v.2.15dev5 * Origin: NIKO (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/6303016a572d.html, оценка из 5, голосов 10
|