Mehrdimensionalen Array ausgeben mit einer schleife
Peter
- perl
Hallo Leute,
ich habe ein kleines Problem, vielleicht könnt ihr mir ja helfen ;-)
Folgendes.
ich habe folgenden Datentyp: $verzeichniss[$count]->[$anzahl];
Ich habe also mehrere Verzeichniss, diese referenzieren einen anderen Array in dem stehen n Elemente. Nun möchte ich z.B.
jeweils eine Zeile in jedem Verzeichniss finden und diese ausgeben.
Gedacht hatte ich mir das wie folgt:
for ($count =0; $count < $a; $count ++) {
for ($count2=0; $count < $b; $count2++) {
print $verzeichniss[$count]->[$count2];
}
}
$a und $b bekomme ich aus einer anderen Prozedur, diese sollen mir
jeweils die länge der beiden Elemente sagen. Leider funktioniert das
nicht...
Kann mir bitte jemand helfen? Oder kennt ihr einen anderen,
vielleicht schöneren Weg?
DAnke!!!!
Hallo Peter,
$a und $b bekomme ich aus einer anderen Prozedur, diese sollen mir
jeweils die länge der beiden Elemente sagen. Leider funktioniert das
nicht...
Was funktioniert denn nicht? Die Ausgabe, die Bestimmung der Länge der Elemente, die Übergabe von $a und $b?
Was macht Dein Skript bis jetzt? Was gibt es bisher aus?
Läuft Deine Skript mit 'use strict' und -w? Wenn ja, aber auch wenn nein, gibt es irgendwelche Fehlermeldungen während des Compilierens oder zur Laufzeit?
Die Fragen sind nicht böse gemeint, aber im Moment sehe ich nicht nur, daß Du in Deiner zweiten Schleife als Abbruchbedingung '$count < $b' agegeben hast, statt wie ich vermute korrekterweise '$count2 < $b'.
Kann mir bitte jemand helfen? Oder kennt ihr einen anderen,
vielleicht schöneren Weg?
foreach $verz (@verzeichniss[0..$a]) {
# dito.
foreach $elem (@{$verz}[0..$b]) {
print $elem;
}
}
Ich hoffe das hilft Dir weiter, und ist elegant genug :-)
Gruß AlexBausW
Please visit my SELFvisitingcard @ http://www.atomic-eggs.com/selfspezial/daten/150.html
Hi Alex,
Kann mir bitte jemand helfen? Oder kennt ihr einen anderen,
vielleicht schöneren Weg?Elemente 0 - $a von @verzeichniss in $verz weitergeben
foreach $verz (@verzeichniss[0..$a]) {
# dito.
foreach $elem (@{$verz}[0..$b]) {
print $elem;
}
}
Das ist der Grund, warum ich lieber mit $var-Referenzen arbeite ;)
foreach $verz (@verzeichnisse[0..$a])
{
foreach (@$verz[0..$b])
{ print; }
}
Meiner Meinung nach schöner, wegen des fehlenden @{}
mfg
CK1
Hallo Christian,
foreach $verz (@verzeichnisse[0..$a])
»» {
»» foreach (@$verz[0..$b])
{ print; }
»» }
Meiner Meinung nach schöner, wegen des fehlenden @{}
Das ist natürlich Geschmackssache. ;-) Mir gefällt @{} ausgesprochen gut, vor allem weil es die Zuordnung schön erkennen lässt:
@{$myhash->{'key'}}
Noch schöner als oben ist natürlich:
foreach (@verzeichniss[$start_a..$end_a]) {
foreach (@{$_}[$start_b..$end_b]) { print; }
}
*bg*
Gruß AlexBausW
Please visit my SELFvisitingcard @ http://www.atomic-eggs.com/selfspezial/daten/150.html
Hi,
Läuft Deine Skript mit 'use strict' und -w?
vermutlich nicht, denn sonst hätte Perl wegen der Verwendung von $a und $b vermutlich eine Warnung ausgespuckt.
Diese beiden Variablen werden - ähnlich $_ - magisch von gewissen Operationen gefüllt; insbesondere von sort. Sie anderweitig zu verwenden ist zumindest bedenklich, wenn nicht sogar gefährlich.
Cheatah
Hallo Cheatah,
vermutlich nicht, denn sonst hätte Perl wegen der Verwendung von $a und $b vermutlich eine Warnung ausgespuckt.
Diese beiden Variablen werden - ähnlich $_ - magisch von gewissen Operationen gefüllt; insbesondere von sort. Sie anderweitig zu verwenden ist zumindest bedenklich, wenn nicht sogar gefährlich.
Das habe ich mir auch gedacht. Aber beim Test mit 'use strict;', hat mir Perl keine einzige Warnung ausgespuckt, weder bei einer einfachen Zuweisung an $a, noch bei einer Deklaration von $a mit my !??
Deswegen habe ich dazu nichts weiter gesagt. Aber Du hast natürlich recht, daß man diese beiden Variablen besser nicht selbst benutzen sollte :-)
Gruß AlexBausW
Please visit my SELFvisitingcard @ http://www.atomic-eggs.com/selfspezial/daten/150.html
Hi,
vermutlich nicht, denn sonst hätte Perl wegen der Verwendung von $a und $b vermutlich eine Warnung ausgespuckt.
Das habe ich mir auch gedacht. Aber beim Test mit 'use strict;', hat mir Perl keine einzige Warnung ausgespuckt,
für Warnungen ist der -w Switch verantwortlich ;-)
Cheatah
hi!
ich habe folgenden Datentyp: $verzeichniss[$count]->[$anzahl];
Ich habe also mehrere Verzeichniss, diese referenzieren einen
anderen Array in dem stehen n Elemente. Nun möchte ich z.B.
jeweils eine Zeile in jedem Verzeichniss finden und diese
ausgeben.
Gedacht hatte ich mir das wie folgt:for ($count =0; $count < $a; $count ++) {
for ($count2=0; $count < $b; $count2++) {
print $verzeichniss[$count]->[$count2];
}
}
Was willst du genau? Damit gibts du nur sämtliche Einträge deiner
referenzierten Listen aus - zumindest wenn $a und $b die Länge dieser
Listen enthalten. Das kannst du auch so schreiben:
print map { @$_ } @ary;
Wenn du nur die Elemente ausgeben lassen willst, die auf einen
bestimmten regulären Ausdruck passen, geht das etwa folgendermaßen:
print grep /ausdruck/, map { @$_ } @ary;
Und wenn du was anderes willst, dann musst du dich schon klarer
ausdrücken und eine genauere Fragestellung bieten :)
bye, Frank!