Thread Hash richtig sortieren (9 answers)
Opened by rwilli at 2009-10-01 14:28

pq
 2009-10-01 15:47
#126396 #126396
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
den ersten ansatz hast du ja schonmal bekommen. im code von 'wer' wird einfach die ip-adresse alphanumerisch verglichen. du willst jedoch die einzelnen teile numerisch vergleichen. dann musst du in der sort-routine entweder die zahlen splitten oder gleich die ganze ip in einen int umwandeln und dann numerisch vergleichen.
hier mal ein beispiel mit einer Wikipedia:Schwartzian_transform:
Code (perl): (dl )
1
2
3
4
5
6
7
my @keys = map {
        $_->[1]
    } sort {
        $a->[0] cmp $b->[0]
    } map {
        [sprintf('%03d' x 4, split /\./, $temphash{$_}->{IP}), $_]
    } keys %temphash;


das sind die sortierten keys.

edit: mit Net::IP, was murphy vorgeschlagen hat, sähe das dann so aus:
Code (perl): (dl )
1
2
3
4
5
6
7
8
use Net::IP qw/ ip_iptobin /;
my @keys = map {
        $_->[1]
    } sort {
        $a->[0] cmp $b->[0]
    } map {
        [ip_iptobin($temphash{$_}->{IP}), $_]
    } keys %temphash;

Last edited: 2009-10-01 16:14:17 +0200 (CEST)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem

View full thread Hash richtig sortieren