Leser: 21
1 2 3 4 5 6 7
#!usr/bin/perl -w @Z1=(2, 2, 2); @Z2=(2, 2, 2); @Z3=(2, 2, 2); @A=(\@Z1, \@Z2, \@Z3);
2011-01-07T09:27:08 eXpliIch möchte ein 3D-Array erstellen (erstmal statisch).
Code (perl): (dl )1 2 3 4 5 6 7#!usr/bin/perl -w @Z1=(2, 2, 2); @Z2=(2, 2, 2); @Z3=(2, 2, 2); @A=(\@Z1, \@Z2, \@Z3);
1 2 3 4 5 6 7 8
#!usr/bin/perl -w use strict; my @A=( [2, 2, 2], [2, 2, 2], [2, 2, 2], );
2011-01-07T09:27:08 eXpliSo wie ist es verstanden habe kann man nicht wie in anderen Sprachen weil Perl die Arrays hintereinander packt.
Deshalb dieser Umweg mit den Referenzen von @Z1, @Z2 und @Z3 im @A.
2011-01-07T09:27:08 eXpliKann ich denn jetzt irgendwie zur Übung die einzelnen Einträge summieren?
Meine Idee:
Wie man schon sehen kann ist das Ergebnis alles andere als richtig.
1 2 3 4 5 6 7 8 9 10
#!usr/bin/perl -w use strict; my @A=( [2, 2, 2], [2, 2, 2], [2, 2, 2], ); print $A[0]->[0]."\n"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#!usr/bin/perl -w use strict; my @A=( [2, 2, 2], [2, 2, 2], [2, 2, 2], ); for my $arrayref (@A) { my @B=@$arrayref; for my $zahl (@B) { print $zahl." "; } print "\n" }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#!usr/bin/perl use strict; use warnings; use Data::Dumper; use List::Util qw/sum/; my $rows = [ [1, 2, 3], [1, 2, 3], [1, 2, 3], ]; my @row_sum = map { sum @$_ } @$rows; print Dumper \@row_sum; my $total_sum = sum @row_sum; print $total_sum . "\n";
@A[]->[];
@A[][];
@A[][][];
$A[0][0][0];
$A[0]->[0]->[0];
$A[0]->[0][0];
int feld[2][2][2] = {... 8 Werte ...};
1 2 3 4 5 6 7 8 9 10 11 12
my @feld; my @daten=(1..8); for my $z (0,1) { for my $y (0,1) { for my $x (0,1) { $feld[$z][$y][$x]=shift(@daten); } } }
2011-01-07T11:52:31 topegBei perl sagt das "Signil" ($@&%) was du "haben willst" nicht was "es ist".
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
#!usr/bin/perl use strict; use warnings; use Data::Dumper; use List::Util qw(sum); my @feld=( [ [1,2], [3,4], ], [ [5,6], [7,8], ], ); print $feld[0][1][0]; #einzelnen Eintrag ausgeben my @foos = map { sum @$_ } @$feld; print Dumper \@foos; my $total = sum @$feld; print $total."\n";
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;
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
#!usr/bin/perl use strict; use warnings; use Data::Dumper; use List::Util qw(sum); my @feld=( [ [1,2], [3,4], ], [ [5,6], [7,8], ], ); # das Konstrukt ausgeben #print Dumper(\@feld); # alle Felder durchgehen my $total; for my $x (0..$#feld){ for my $y (0..$#{$feld[$x]}){ for my $z (0..$#{$feld[$x][$y]}){ $total += $feld[$x][$y][$z]; } } } print "$total\n"; # alternativ ohne Index, # indem über die Arrays direkt iteriert wird: my $all; for my $x (@feld){ for my $y (@$x){ for my $z (@$y){ $all += $z; } } } print "$all\n"; # das kann man auch mit map schreiben: my $summe=0; map { map{ map{ $summe+=$_ } @$_ } @$_ } @feld; print "$summe\n"; # oder über sum und map: my $sum = sum map { sum map{ sum(@$_) } @$_ } @feld; print "$sum\n";
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;
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;
2011-01-07T10:16:51 topegGewöhne es dir gleich an auch "strict" zu nutzen, das erzwingt unter anderem das Iniatlisieren von Variablen.
2011-01-07T09:27:08 eXpliich bin Perl-Neulich
...
Ich möchte ein 3D-Array erstellen