Thread Probleme mit mehrdimensionalen Arrays
(18 answers)
Opened by eXpli at 2011-01-07 10:27
Hi,
ein 3D-Array musst Du auch in drei Ebenen abarbeiten, mit my @foos = map { sum @$_ } @$feld; werden aber nur 2 Ebenen verarbeitet. Ausserdem sollte es @feld heissen, nicht @$feld; Schließlich geht es um einen "echten" Array, nicht um eine Array Referenz. Wenn etwas nicht funktioniert, gibt es oftmals Warnungen oder Fehlermeldungen. Wie lauten diese? Ansonsten kann man immer noch beschreiben, was man erwartet, was passieren soll, und was dann effektiv passiert (bzw. welches Resultat man erwartet und welches man bekommt). Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 my $total; for my $x (0,1){ for my $y (0,1){ for my $z (0,1){ $total += $feld[$x][$y][$z]; } } } print $total; Drei Schleifen für drei Ebenen ist schon mal gut. Das 0,1 stellt eine Liste aus 2 Elementen dar, das erste Element ist die 0, das zweite die 1. Das ist etwas suboptimal, weil die Anzahl der Elemente hart kodiert ist. Sobald ein Array mehr Elemente enthält, werden die zusätzlichen Elemente nicht mehr ausgewertet. Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 my $total; # setze x auf den ersten bis letzten Index des aeusseren Array for my $x ( 0 .. $#feld ){ # setze y auf den ersten bis letzten Index des Array in zweiter Ebene for my $y ( 0 .. $#{$feld[$x]} ){ # setze z auf den ersten bis letzten Index des Array in dritter Ebene for my $z ( 0 .. $#{ $feld[$x]->[$y] } ){ # x ist echtes Feld, daher ohne Pfeil # für y und z muss dereferenziert werden, daher mit Pfeil $total += $feld[$x]->[$y]->[$z]; } } } print $total; Code ungetestet, weil quick hack. edit: code comments changed; leerzeilen spendiert. Last edited: 2011-01-07 16:13:54 +0100 (CET) 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! |