Поиск позиции элемента в массиве
May. 19th, 2006 09:15 am1.
my $i; for ($i = 0; $i < scalar @array; $i++) { last if ($array[$i] == $value); }
2.
my $i = 0; foreach (@array) { last if ($_ == $value); $i++; }
3.
my $i = 0; map { $_ == $value ? last : $i++ } @array; }
Проверка:
# perl -MBenchmark=timethese -de0
DB<1> @array = map { int rand 10240 } 1..10240
DB<2> $value = 6000
DB<3> timethese (10_000,{'A' => q|my $i; for ($i = 0; $i < scalar @array; $i++) { last if ($array[$i] == $value); }|,\
'B' => q|my $i = 0; foreach (@array) { last if ($_ == $value); $i++; }|,\
'C' => q|my $i = 0; map { $_ == $value ? last : $i++ } @array;|})
Benchmark: timing 10000 iterations of A, B, C...
A: 56 wallclock secs (46.91 usr + 0.02 sys = 46.93 CPU) @ 213.08/s (n=10000)
B: 36 wallclock secs (31.43 usr + 0.01 sys = 31.44 CPU) @ 318.07/s (n=10000)
C: 35 wallclock secs (35.03 usr + 0.00 sys = 35.03 CPU) @ 285.47/s (n=10000)
no subject
Date: 2006-05-19 06:26 am (UTC)no subject
Date: 2006-05-19 06:40 am (UTC)no subject
Date: 2006-05-19 06:45 am (UTC)Глядя на тайминги
Date: 2006-05-19 06:29 am (UTC)Re: Глядя на тайминги
Date: 2006-05-19 06:42 am (UTC)в одном месте я произвел фурор, когда обернутые в функции данные методы показали в третьем случае -2 секунды :)
Re: Глядя на тайминги
Date: 2006-05-19 06:44 am (UTC)Re: Глядя на тайминги
Date: 2006-05-19 06:57 am (UTC)Re: Глядя на тайминги
Date: 2006-05-19 07:22 am (UTC)Re: Глядя на тайминги
Date: 2006-05-19 07:29 am (UTC)Benchmark не крутит B 10_000_000 раз, а сразу выходит из loop'a
Re: Глядя на тайминги
Date: 2006-05-19 07:32 am (UTC)Re: Глядя на тайминги
Date: 2006-05-19 07:37 am (UTC)Re: Глядя на тайминги
Date: 2006-05-19 07:43 am (UTC)самое интересное начнется, если попросить привести работающий в данном тесте код.
Re: Глядя на тайминги
Date: 2006-05-19 07:49 am (UTC)Re: Глядя на тайминги
Date: 2006-05-19 07:54 am (UTC)а с last -- нет.
Re: Глядя на тайминги
Date: 2006-05-19 07:57 am (UTC)Re: Глядя на тайминги
Date: 2006-05-19 08:01 am (UTC)Re: Глядя на тайминги
Date: 2006-05-19 08:05 am (UTC)А в исходном посте квазинормальные результаты только за счёт слишком большой длинны массива, в котором идёт поиск?
Re: Глядя на тайминги
Date: 2006-05-19 08:08 am (UTC)Re: too few iterations
Date: 2006-05-19 07:51 am (UTC)Re: too few iterations
Date: 2006-05-19 07:55 am (UTC)вопрос "почему так различается результат?"
Re: too few iterations
Date: 2006-05-19 08:01 am (UTC)Re: too few iterations
Date: 2006-05-19 08:04 am (UTC)Re: too few iterations
Date: 2006-05-19 08:11 am (UTC)Гадая на кофейной гуще
Date: 2006-05-19 07:53 am (UTC)