Thread sort für Zahlen und Strings (8 answers)
Opened by der_thomas at 2014-01-04 13:01

Linuxer
 2014-01-05 00:37
#172847 #172847
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
In der Testliste ist ja jeweils das erste Element numerisch und das zweite ein String. Ist das bei den "echten" Daten auch so? Ist der Datentyp pro Spalte also fix?

Wenn ja, stellt sich die Frage, warum Du pro Spalte numerisch und lexikalisch sortierst.
Warum nicht die erste Spalte nur numerisch behandeln *und* die zweite nur lexikalisch?

Oder überseh ich etwas?

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#! /usr/bin/perl
use strict;
use warnings;
use Data::Dumper;

my @data = (
[ 1, "berta" ],
[ 20, "thomas" ],
[ 11, "walter" ],
[ 1024, "adam" ],
[ 20, "chris" ],
);

# 1. Spalte numerisch, dann bei Gleichheit 2. Spalte lexikalisch
my @sorted = sort { $a->[0] <=> $b->[0] || $a->[1] cmp $b->[1] } @data;

print Dumper \@sorted;

# 2. Spalte lexikalisch, dann bei Gleichheit 1. Spalte numerisch
@sorted = sort { $a->[1] cmp $b->[1] || $a->[0] <=> $b->[0] } @data;

print Dumper \@sorted;


Ansonsten, wie schon geschrieben wurde, die Sortierung in einen eigenen Code-Block packen und die entsprechenden Warnings für den Block abschalten.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread sort für Zahlen und Strings