Сначала я поэкспериментировал с модулем Sort::Key
, потому что сортировка занимает больше времени, чем простая зацикливание и печать. Кроме того, если внутренние ключи хеширования (в основном) идентичны, то вам следует просто предварительно отсортировать их, но я предполагаю, что это не тот случай, иначе вы бы это уже делали.
Очевидно, что вы также должны попытаться присвоить $ signal_db {$ cycle} ссылке. Вы можете обнаружить, что each
быстрее, чем keys
плюс поиск, особенно если используется с Sort::Key
. Я бы проверил, работает ли карта быстрее, чем foreach
, наверное, тоже самое, но кто знает. print
может работать быстрее, если вы передадите ему список или вызовете его несколько раз.
Я не пробовал этот код, но объединяя все эти идеи, кроме each
, получаем:
foreach my $cycle (nsort keys %signal_db) {
my $r = $signal_db{$cycle};
map { print ($r->{$_},$_,"\n"); } (nsort keys %$r);
}
Здесь есть статья о сортировке в perl здесь , посмотрите преобразование Шварца, если хотите узнать, как можно использовать each
.
Если ваш код не должен заботиться о безопасности, тогда вы можете отключить защиту Perl от атак алгоритмической сложности , установив PERL_HASH_SEED или связанных переменных и / или перекомпилировать Perl с измененными настройками, так что команды perl keys
и values
возвращали ключи или значения уже в отсортированном порядке, тем самым экономя ваше время на их сортировку. Но, пожалуйста, посмотрите этот разговор 28C3 , прежде чем делать это. Я даже не думаю, что это сработает, вам нужно прочитать эту часть исходного кода Perl, может быть, проще просто реализовать свой цикл в C.