in reply to Sorting IP addresses, lots of them, quickly
on my PC, the results for 1 million elements are:use Benchmark qw(cmpthese); use Socket; use Sort::Key qw(ukeysort keysort); my $n = 1000000; my @address = map { join ('.', map {int rand 256 } 0..3) } 0..$n; print "\@address populated\n"; sub gloryhackish { my @in = @address; my @sorted = map { $_ = inet_ntoa($_) } (sort (map {$_ = inet_aton($_)} @in)); } sub ks { my @sorted = keysort { inet_aton($_) } @address; } sub uks { my @sorted = ukeysort { /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/; ($1 << 24) + ($2 << 16) + ($3 << 8) + $4 } @ +address; } cmpthese -1, { gloryhackish => \&gloryhackish, keysort => \&ks, ukeysort => \&uks };
s/iter gloryhackish keysort ukeysort gloryhackish 24.4 -- -29% -48% keysort 17.2 42% -- -26% ukeysort 12.7 92% 35% --
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Sorting IP addresses, lots of them, quickly
by gloryhack (Deacon) on May 16, 2007 at 10:36 UTC |