Thread Sortierung nach Array
(18 answers)
Opened by bianca at 2012-12-25 18:11
Ich glaube, nun habe ich es doch geschnackelt.
Scheint soweit zu funktionieren. Gibt es von euch Optimierungsvorschläge? Ist das überhaupt korrekt, wie ich das gemacht habe oder fliegt das bei ein paar mehr Datensätzen durch die Luft? :) Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 #!/usr/bin/perl -w use strict; use warnings; my %uebergabe = ( data => { 1 => { 1 => 'aaron', 2 => 'suppe', 3 => 10, }, 2 => { 1 => 'aaron', 2 => 'zander', 3 => 20, }, 3 => { 1 => 'hannes', 2 => 'zander', 3 => 20, }, }, art => ['a','a','n'], # Art der Spalte a=Alpha oder n=Nummer sortierprio => [3,2,1], # Nummer der Spalte in der Reihenfolge der Sortierung sortierricht => [1,1,1], # Sortierrichtung 0=abwärts/rückwärts oder 1=aufwärts/vorwärts ); tabellenhandler(\%uebergabe); ############################################################################### sub tabellenhandler { my ($input) = @_; foreach my $zeile ( sort { my $return = 0; my $spalte = -1; while (!$return && $spalte < scalar @{$input->{sortierprio}}) { $spalte ++; my $vergleich_spalte = $input->{sortierprio}[$spalte]; if ($input->{sortierricht}[$vergleich_spalte - 1]) { if ($input->{art}[$vergleich_spalte - 1] eq 'n') { $return = $input->{data}{$a}{$vergleich_spalte} <=> $input->{data}{$b}{$vergleich_spalte}; } else { $return = $input->{data}{$a}{$vergleich_spalte} cmp $input->{data}{$b}{$vergleich_spalte}; } } else { if ($input->{art}[$vergleich_spalte - 1] eq 'n') { $return = $input->{data}{$b}{$vergleich_spalte} <=> $input->{data}{$a}{$vergleich_spalte}; } else { $return = $input->{data}{$b}{$vergleich_spalte} cmp $input->{data}{$a}{$vergleich_spalte}; } } } $return; } keys %{$input->{data}} ) { print "Zeile:"; foreach my $spalte ( sort {$a <=> $b} keys %{$input->{data}{$zeile}} ) { print " - ".$input->{data}{$zeile}{$spalte}; } print "\n"; } } 10 print "Hallo"
20 goto 10 |