in reply to Please help with sorting/sort
Memory is optimized because this avoids copying the entire $line[$_] for sort purposes. Instead, it copies only the extracted sort key, and index. Since the regular-expression for extracting the sort key is performed only once per record (instead of on each compare on the sort), CPU is optimized.#! /usr/bin/perl use strict; my @lines = <DATA>; my @matching = map {{IDX=>$_, ID_KEY => ( $lines[$_] =~ /id:\s?(\d+)/ + )}} grep $lines[$_] =~ /id:\s?\d/, 0 .. $#lines; my @sorted_matching = sort { $a->{ID_KEY} <=> $b->{ID_KEY} } @matching; @lines[map {$_->{IDX} } @matching] = @lines[map {$_->{IDX}} @sorted_matching]; print @lines; __DATA__ #Comment *ss id addr id: 099 bbb ccc aaa *ss id addr id: 003 aaa bbb ccc #Comment 2 *333 23 ss id: 002 aaa bbb ccc *22 233333333 34432 233 44
I would be the first to admit that this probably classic "premature optimization" if the data size and frequency of use is small, but it was fun.
"As you get older three things happen. The first is your memory goes, and I can't remember the other two... " - Sir Norman Wisdom
|
|---|