use strict;
use Time::HiRes qw[gettimeofday tv_interval];
my $start_index = int(rand(50))+100;#this value is arbitrary for this discussion
my $duration = 75;#also arbitrary but assume it will always be several times the size of the dataset
my $hash = {};
my @dataset = qw(foo bar baz qux bob joe sue tom);
my $partial = $duration % scalar(@dataset);
my $full = ($duration - $partial) / scalar(@dataset);
my $start = [gettimeofday()];
for my $index (0..$#dataset) {
my $w = $dataset[$index];
for (0..$full-1) {
my $i = $start_index + $index + (scalar(@dataset) * $_);
$hash->{$i} = $w;
}
}
print " full ".tv_interval($start)." secs\n";$start = [gettimeofday()];
for my $index (0..$partial-1) {
my $w = $dataset[$index];
my $s = $start_index + $index + (scalar(@dataset) * $full);
$hash->{$s} = $w;
}
print " part ".tv_interval($start)." secs\n";$start = [gettimeofday()];
При реализации с ( значительно ) большим набором данных и продолжительностью выполнение вышеуказанной логики в цикле "полный" занимает 60 ~ 120 секунд. Есть ли более эффективный метод достижения тех же результатов?
Edit:
Чтобы дать более точную информацию о размере набора данных, в котором он используется, эта оптимизация производительности предназначена для программы обработки сигналов.