Leser: 28
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# Verdichten: my %hash; for (my $zz = 0; $zz < scalar @PTage; $zz ++) { $hash{$Titel[$zz]}{$Wert[$zz]} = $PTage[$zz]; } # Ausgeben: foreach my $temp (sort {$a cmp $b} keys %hash) { print "$temp:"; my $werte = ''; foreach my $temp2 (keys %{$hash{$temp}}) { $werte .= " $temp2"; print " $hash{$temp}{$temp2}"; } print "$werte\n"; }
2010-01-29T11:48:40 havi... Versuche C-Stil Schleifen zu vermeiden ...
1 2 3
for my $zz (0 .. scalar @PTage) { $hash{$Titel[$zz]}{$Wert[$zz]} = $PTage[$zz]; }
1 2 3
for my $zz (0 .. $#PTage) { $hash{$Titel[$zz]}{$Wert[$zz]} = $PTage[$zz]; }
2010-01-29T12:05:47 HagenOhne deine Aussage abwerten zu wollen: also "nur" Lesbarkeit, kein 'technischer' Hintergrund.
QuoteHier hat sich allerdings noch ein kleiner Fehler eingeschlichen
1
2
3
4
5
6
7
8
9
10
11
$ time perl -le'for my $i( 0 .. 10_000_000 ){ 1 }'
real 0m1.014s
user 0m0.940s
sys 0m0.004s
$ time perl -le'for(my $i= 0; $i <= 10_000_000;$i++ ){ 1 }'
real 0m1.532s
user 0m1.532s
sys 0m0.000s
2010-01-29T12:11:26 pqedit: im übrigen schleicht sich bei c-style auch leichter ein fehler ein, nur hat havi hier bewiesen, dass das auch bei der perl-variante passieren kann =)
2010-01-29T15:33:28 reneeOhne das "@". Einfach nur $#PTage
for my $zz (0 .. $#PTage)
1
2
3
4
5
6
7
8
9
10
11
12
%Info = (
A => {
InternalCounter = 1,
PTage => [ ... ],
Date => [ ... ],
},
B => {
InternalCounter = 2,
PTage => [ ... ],
Date => [ ... ],
}
)
1 2 3 4
for my $Title ( sort { $a->{InternalCounter} <=> $b->{InternalCounter} } keys %Info ) { my $String = $Title . " " . join ( " ", @{ $Info{$Title}->{PTage} } ) . " " . join( ", ", @{ $Info{$Title}->{Date} } ); print $String; }
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
#!/usr/bin/perl use strict; use warnings; # die Daten my @PTage=qw(1264633200 1264719600 1264633200 1264719600); my @WErt=qw(2 2 3 3); my @Titel=qw(A A B B); # reorganisieren: my %liste=(); # alle Werte durch gehen for my $pos (0..$#PTage) { my $titel=$Titel[$pos]; my $wert=$WErt[$pos]; my $ptage=$PTage[$pos]; # wenn der eintrag im Hash noch nicht existiert, # dann anlegen unless(exists($liste{$titel})) { # als Wert wird ein anonymer Hash eingefügt, # der die nötigen Einträge enthält $liste{$titel}={werte=>[], ptage=>[]} } # die Werte hinzufügen push(@{$liste{$titel}->{werte}},$wert); push(@{$liste{$titel}->{ptage}},$ptage); } render_daten(%liste); ######################################################################## sub render_daten { my %liste=@_; # die Schlüssel (Titel) sortieren # und einzeln durch gehen for my $titel (sort keys(%liste)) { my @werte=@{$liste{$titel}->{werte}}; my @ptage=@{$liste{$titel}->{ptage}}; # mach was mit den Werten: printf("%s: %s %s\n",$titel, join(' ',@ptage), join(', ',@werte)); } }
1 2 3 4 5 6
unless(exists($liste{$titel})) { # als Wert wird ein anonymer Hash eingefügt, # der die nötigen Einträge enthält $liste{$titel}={werte=>[], ptage=>[]} }
2010-01-29T17:46:31 topegSchon klar, aber er ist Anfänger.
Da ist es verständlicher das noch mal klar zu machen welche Struktur das hat.
2010-01-30T14:37:25 mteffenh... Danke für den Anfänger :) ...
Quotedaher die Annahme, entschuldige.User since 2010-01-29 5 Artikel