Archiv verlassen und diese Seite im Standarddesign anzeigen : perl: Indexvariable in foreach loop
Wenn ich einen foreach loop so konstruiere:
my @sachen = ("Eins", "Zwei", "Drei");
foreach (@sachen) {
&machwas($_);
}
und auf die Indexvariable zugreifen will, d.h. die Variable, die 1 zugewiesen hat wenn $_ == "Zwei", wie mache ich das? Geht das ueberhaupt?
Danke,
Samsara
peschmae
29-01-2004, 12:18
Muss es überhaupt zwingend so eine Variable geben?
Ich halte es jetzt eher für unwarscheinlich, dass die - falls es sie gibt - von aussen Zugreifbar ist.
MfG Peschmä
Original geschrieben von peschmae
Muss es überhaupt zwingend so eine Variable geben?
In dem Sinne, dass ein Pointer inkrementiert wird? Ich denke ja!
Ich halte es jetzt eher für unwarscheinlich, dass die - falls es sie gibt - von aussen Zugreifbar ist.
Ja, das ist auch meine Befuerchtung. Vermutlich ist die Verwendung von foreach dafuer etwas schneller als die entsprechende Verwendung von for oder while/until.
Danke,
Samsara
peschmae
29-01-2004, 17:48
@samsara: Keine Ahnung wie das Implementiert wird. Deshalb auch das ? - kann mir aber gerade keine andere Lösung vorstellen.
Dann mach halt einen "normalen" for-Loop. Geht ja auch. Mach ich in Java ständig (da gibts leider kein for-each).
MfG Peschmä
axeljaeger
30-01-2004, 13:58
Original geschrieben von peschmae
Dann mach halt einen "normalen" for-Loop. Geht ja auch. Mach ich in Java ständig (da gibts leider kein for-each).
Stimmt, in Java 1.4 gibt es das noch nicht.
Original geschrieben von peschmae
@samsara: Keine Ahnung wie das Implementiert wird. Deshalb auch das ? - kann mir aber gerade keine andere Lösung vorstellen.
Dann mach halt einen "normalen" for-Loop. Geht ja auch. Mach ich in Java ständig (da gibts leider kein for-each).
MfG Peschmä
Klar, die benutze ich dauernd. Ich hatte nur gehofft, meinen Code etwas lesbarer zu machen - ich meine, jedesmal das standardmaessige
for (my $i = 0; $i < @array; ++$i)
auszuschreiben, nur weil man auf $i direkt zugreifen koennen muss, oder aus zwei arrays gleichzeitig liest, ist eigentlich unnoetiger overhead. Es gibt doch sonst fuer alles inbuilt variables, diese $!, $# oder wie sie nun im einzelnen aussehen!
Schaetze, mit manchen Dingen muss man vielleicht einfach leben! :rolleyes:
Gruss,
Samsara
Nur so'n Vorschlag:
@sachen=qw(eins zwei drei);
foreach( 0 .. $#sachen) {
print $sachen[$_]."\n"
}
Es muss allerdings mindestens ein Element vorhanden sein. Die effizienteste Lösung ist es allerdings nicht(Speicher).
Interessanter Vorschlag, danke! Ich werde wohl weiter die Standard-for-Syntax verwenden, a la C.
Samsara
PS: Ich glaube, es fehlt ein Semikolon? Ungetestet, sozusagen:
@sachen=qw(eins zwei drei);
foreach( 0 .. $#sachen) {
print $sachen[$_]."\n";
}
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.