Thread Nur bestimmte Werte aus einer Liste ausgeben (3 answers)
Opened by Wild.Card at 2018-01-22 19:41

Wild.Card
 2018-01-22 19:41
#187940 #187940
User since
2017-02-27
19 Artikel
BenutzerIn
[default_avatar]
Ich gib's zu, ich tu mich wirklich schlecht mit foreach-Schleifen..Was mein Problem ist, ist es nur bestimmte Elemente wiederzugeben. Ich benutze sehr selten foreach, z.B. wenn ich "Eltern-Kind-Prozesse" definiere:

Code: (dl )
1
2
3
4
5
6
my $pid = undef;
foreach my $i (1..10)
{
$pid = fork();
if (defined($pid))
...

Ich habe mir nunmal angewöhnt sonst alles in grep zu schreiben, was ich sonst mit foreach auch tun könnte. Wenn ich also von einer Liste mit Zahlen 1 bis 15, die Werte 6 bis 11 wiedergeben will, sieht es in grep so aus:

Code: (dl )
1
2
3
4
5
my @array = (1..15); 

my @result = grep {$_ > 5 && $_ < 12}@array;

print join (", ", @result);

mit foreach habe ich es versucht:
Code: (dl )
1
2
3
4
5
6
7
my @array = (1..15); 

foreach (@array) # HIER scheint das Problem zu sein
{
print $_ if ($_ > 5 && $_ < 12); #Das hier spielt keine Rolle
}
print join (", ", @array);

Ich habe die Stelle kommentiert wo ich das Problem vermute, denn es ist ja so, dass für die foreach-Schleife eine Stringeingabe erwartet wird, welche dann für diese Liste iteriert. Ich habe im O'Reiley geguckt, aber zu meinem Fall habe ich nichts gefunden. Müsste ich denn sowas scheiben wie:
foreach @result(@array) { ...
schreiben? Gibt es eine effizientere Möglichkeit, nur bestimmte Werte wiederzugeben?
Zum Schluss, warum mir grep lieber ist - so ziemlich aus dem gleichen Grund, warum ich lieber Scala lerne, als Java-Programmierer zu werden :)
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
my @ungerade; 

foreach (1..500)
{
if ($_ % 2)
{
push (@ungerade, $_);
}
}
print "\n\n Ungerade Zahlen von 1 bis 500: \n";
print join ("\t", @ungerade);

VS
Code: (dl )
1
2
3
print "\n\n Das selbe in grep: \n";
my @ungerade = grep { $_ % 2; } 1..500;
print join ("\t", @ungerade);

View full thread Nur bestimmte Werte aus einer Liste ausgeben