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

FIFO
 2013-02-05 22:06
#165499 #165499
User since
2005-06-01
469 Artikel
BenutzerIn

user image
2013-02-05T20:24:02 Student87
Edit 2: Wenn ich in Code 1 von topec d durch nen Punkt . ersetze, um auch X und Y zu matchen, bekomme ich diese Meldungen:
Use of uninitialized value in numeric comparison (<=>) at ./Skript line 9, <IN> line 77.
...
Edit 3: Wieso denn "uninitialized value" ? Wie kann das sein, wenn ich nen Punkt benutze, matche ich doch immer und der value ist da/initialized ?


Naja, Du wendest den numerischen Vergleichsoperator <=> auf nicht-numerische Werte ('X' etc.) in $1 an.

Code (perl): (dl )
my @sorted = map{$_->[0]} sort {$a->[1] <=> $b->[1]} map{/chr(\d+)/;$_=[$_,$1]}@unsorted;


liest Du am besten rückwärts:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Schritt 1:
# Nimm elementweise vom @unsorted, 
# extrahiere alles nach 'chr', 
# speichere das Element und den Extrakt als "Wertepaar" in einem anonymen Array
map { /chr(\d+)/; $_ = [$_, $1] } @unsorted;

# Schritt 2:
# sortiere die Wertepaare (bzw. ihre Referenzen) nach Element 1 (dem Extrakt) 
sort { $a->[1] <=> $b->[1] }

# Schritt 3:
# nimm aus den sortierten Wertepaaren nur das erste Element, 
# mach eine Liste daraus in der Reihenfolge aus Schritt 2
map{ $_->[0] }


EDIT Linuxer war schneller ...
Last edited: 2013-02-05 22:08:29 +0100 (CET)
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it? -- Brian Kernighan: "The Elements of Programming Style"

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