Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]5810[/thread]

map und Listen? (Seite 4)

Leser: 2


<< |< 1 2 3 4 5 6 >| >> 52 Einträge, 6 Seiten
havi
 2003-10-18 14:50
#62286 #62286
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Hi!

Richtig!

Ich persoenlich verwende map sehr gerne und zwar fuer die
verschiedensten Dinge!

Ein kleines Beispiel:
Code: (dl )
1
2
3
4
5
6
7
map {
s%^\s+%%g;
s%\s+$%%g;
s% +% %g;
s%\"%%g;
# usw.
} @array;


Gruss
Strat
 2003-10-18 14:53
#62287 #62287
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
@havi:
und was ist der Vorteil gegenueber:
Code: (dl )
1
2
3
4
5
6
7
foreach (@array) {
s%^\s+%%g;
s%\s+$%%g;
s% +% %g;
s%\"%%g;
# usw.
}
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
havi
 2003-10-18 14:56
#62288 #62288
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
@Strat: Es gibt hier keinen Vorteil! Das habe ich aber auch nicht gesagt!
Mir persoenlich ist map einfach lieber als foreach!

Gruss
havi
 2003-10-18 15:02
#62289 #62289
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Code: (dl )
1
2
3
4
5
6
D:\>benchmark.pl
Benchmark: timing 1000000 iterations of foreach, map...
foreach: 12 wallclock secs (10.34 usr + 0.00 sys = 10.34 CPU) @ 96683.75/s (n=1000000)
map: 14 wallclock secs (12.28 usr + 0.00 sys = 12.28 CPU) @ 81426.59/s (n=1000000)

D:\>


Gruss
havi
 2003-10-18 15:20
#62290 #62290
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
@Strat: Aufklaerung: Das war wohl ein Missverstaendnis!
Mein erstes Posting auf Seite 2 war auf das letzte Posting von kabel auf Seite 1 bezogen! Du warst einfach wieder mal zu schnell fuer mich!

Gruss
betterworld
 2003-10-18 18:57
#62291 #62291
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=havi,18.10.2003, 12:50]
Code: (dl )
1
2
3
4
5
6
7
map {
  s%^\s+%%g;
  s%\s+$%%g;
  s% +% %g;
  s%\"%%g;
#  usw.
} @array;
[/quote]
Hi.
Im Gegensatz zur foreach-Loesung hat dieser Code irgendwie keinen Sinn. Er veraendert das Array nicht und hat keine Seiteneffekte.
pq
 2003-10-18 19:20
#62292 #62292
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
@betterworld: der code verändert das array nicht? klar tut er das...
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
betterworld
 2003-10-18 22:56
#62293 #62293
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=pq,18.10.2003, 17:20]@betterworld: der code verändert das array nicht? klar tut er das...[/quote]
Tatsaechlich!
Ich muss gestehen, dass ich anscheinend bisher eine falsche Vorstellung von der Arbeitsweise von map hatte. Sorry. Ich dachte, es wuerde jedesmal eine Kopie des Wertes anlegen oder so etwas. Da muss ich jetzt direkt einmal suchen, ob ich aufgrund dieses Glaubens Bugs in meinen Scripten habe\n\n

<!--EDIT|betterworld|1066503690-->
format_c
 2003-10-19 00:36
#62294 #62294
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
[quote=Strat,17.10.2003, 18:40]
Code: (dl )
1
2
3
4
my @liste = ('A'..'K');
@liste2 = map { ++$_ } @liste;
print "@liste2\n"; # gut und schoen, aber:
print "@liste\n";
[/quote]
Genau das ist das was Strat gesagt hat.
Dass map und grep im void-Kontext arbeiten.
Also egal ob du das Ergebnis in einer anderen Liste speicherst wenn du was mit map oder grep mit einer Liste machst, sie werden immer die ursprüngliche Liste mit ändern. sowas wie:
Code: (dl )
map { ++$_ } @liste;

ist halt verwirrender als
Code: (dl )
++$_ for @liste;


Gruß Alex
Strat
 2003-10-19 02:53
#62295 #62295
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wenn man $_ (oder die Laufvariable) bei for(each), map oder grep veraendert, veraendert man die Eingangsliste; das geht teilweise sogar ueber mehrere Funktionen hinweg. $_ ist da naemlich ein Alias auf das Element in der Liste, und nicht einfach irgendeine Variable, in die der Wert kopiert wird.
Anmerkung: Bei while ist es jedoch kein Alias. Deshalb sollte man auch, wenn man eine Datei, die man mit while einliest, aufpassen, dass man z.B. in einer Subroutine oder so $_ lokalisiert.
Code: (dl )
1
2
3
4
5
6
7
8
9
while (<FH>) {
print "BEVOR: $_";
&Machwas();
print "NACHHER: $_";
}
sub Machwas {
# veraendere $_, z.B.
$_ = 20;
} # Machwas
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< |< 1 2 3 4 5 6 >| >> 52 Einträge, 6 Seiten



View all threads created 2003-10-08 15:36.