PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : perl: Indexvariable in foreach loop



samsara
29-01-2004, 12:09
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ä

samsara
29-01-2004, 14:09
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.

samsara
30-01-2004, 14:32
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

fork
30-01-2004, 16:34
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).

samsara
30-01-2004, 17:25
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";
}