Thread Natürlicher Sort, aber nicht mit @sorted = sort @unsorted
(30 answers)
Opened by Student87 at 2013-02-05 17:52
Du musst eine Fallunterscheidung machen, in der du nachschaust ob du eine Zahl hast oder ein Buchstaben und dann den richtigen Vergleichsoperator benutzen.
Du kannst das dadurch lösen das du die Schwarzsche Transformation erweiterst: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 my @sorted = map{ $_ = $_->[0] } sort { if($a->[2] and $b->[2]) { $_ = $a->[2] cmp $b->[2]; } elsif($a->[2] and !$b->[2]) { $_ = 1; } elsif(!$a->[2] and $b->[2]) { $_ = -1; } else { $_ = $a->[1] <=> $b->[1]; } } map { my ($n) = $_ =~ /chr(\d+)/; my ($s) = $_ =~ /chr(\D+)/; $s = '' if( !$s ); $n = 0 if( !$n ); $_ = [$_,$n,$s]; } @unsorted; Achte auf die Fallunterscheidungen wenn eines eine Zahl ist das andere ein Buchstabe. Das sorgt dafür das die Buchstaben ans Ende Geschoben werden. |