Thread Komplexer sort (natürliche Sortierung) (13 answers)
Opened by Student87 at 2012-11-23 17:10

pq
 2012-11-23 17:25
#163584 #163584
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
du kannst den string im sort aufsplitten:
Code (perl): (dl )
1
2
3
4
5
my @sorted = sort {
    my ($chr_a, $num_a) = $a =~ m/^([a-z]+)(\d+)/;
    my ($chr_b, $num_b) = $b =~ m/^([a-z]+)(\d+)/;
    $chr_a cmp $chr_b || $num_a <=> $num_b
} @array;


wenn es eine grosse liste ist, lohnt sich aber eine schwartzian transform. insofern ist der ansatz schon nicht schlecht, eine eigene spalte zu machen.
Code (perl): (dl )
1
2
3
4
5
6
7
my @sorted = map {
    $_->[2]
} sort {
    $a->[0] cmp $b->[0] || $a->[1] cmp $b->[1]
} map {
    my ($chr, $num) =~ m/^([a-z]+)(\d+)/; [$chr, $num, $_]
} @array;


Editiert von pq: typo: cmp
Last edited: 2012-11-23 17:42:27 +0100 (CET)
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 Komplexer sort (natürliche Sortierung)