Thread Natürlicher Sort, aber nicht mit @sorted = sort @unsorted (30 answers)
Opened by Student87 at 2013-02-05 17:52

topeg
 2013-02-07 11:44
#165551 #165551
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
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.

View full thread Natürlicher Sort, aber nicht mit @sorted = sort @unsorted