Schrift
[thread]6619[/thread]

Problem mit Anonymem Array



<< |< 1 2 >| >> 15 Einträge, 2 Seiten
Fraser
 2005-01-10 11:58
#50661 #50661
User since
2005-01-10
10 Artikel
BenutzerIn
[default_avatar]
Hi Leute,
kann mir hier jemand die Ausgabe erklären.
Es ist ne Übungsaufgabe und komm nicht richtig weiter.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
@a = (1..3);
@b = (4..6);
@c = (7..9);
@abc = map {[$a[$_], $b[$_], $c[$_]]} 0..$#a;

for ($i = 0, $i<$#a, ++$i) {

print "$abc[0]->[$i]\n";
print "${$abc[1]}[$i]\n";
print "$abc[2][$i]\n"
}
renee
 2005-01-10 12:21
#50662 #50662
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@a = (1..3); # erstelle ein Array @a mit den Elementen 1,2,3
@b = (4..6); # erstelle ein Array @b mit den Elementen 4,5,6
@c = (7..9);# erstelle ein Array @b mit den Elementen 7,8,9

# gehe von 0 bis zum may Index von @a (hier: 2, da 3 Elemente in @a)
# map gibt ein Array zurück. zwischen den {} steht, wie die Elemente
# aussehen. Hier wird ein anonymes Array zurückgegeben, in dem die Elemente
# aus @a,@b,@c sind, die jeweils den gleichen Index haben.
# der aktuelle Index (0..$#a) steht in $_
# Hier wird eine Matrix aufgebaut:
# Bei Excel wäre es A0,B0,B2,A1,B1,C1,A3,B3,C3
@abc = map {[$a[$_], $b[$_], $c[$_]]} 0..$#a;

# ungefähre Langschreibweise:
# @abc;
# for(0..$#a){
# push(@abc,[$a[$_],$b[$_],$c[$_]]);
# }

# for-Schleife. $i ist der Schleifenzähler...
for ($i = 0, $i<$#a, ++$i) {
# gebe vom 1.Element (mit Index 0) von @abc, das i. Element aus (also A0,B0,C0);
print "$abc[0]->[$i]\n";
# das gleiche für's 2.Element (A1,B1,C1)
print "${$abc[1]}[$i]\n";
# und die letzte Zeile...
print "$abc[2][$i]\n"
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
format_c
 2005-01-10 12:21
#50663 #50663
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Schau dir mal die for-Schleife genauer an:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
@a = (1..3);
@b = (4..6);
@c = (7..9);
@abc = map {[$a[$_], $b[$_], $c[$_]]} 0..$#a;

for ($i = 0, $i<$#a, ++$i) {
print '$i: ',$i,"\n";
print "$abc[0]->[$i]\n";
print "${$abc[1]}[$i]\n";
print "$abc[2][$i]\n"
}


Dann wird dir sicher was auffallen...

Gruß alex\n\n

<!--EDIT|format_c|1105352617-->
Fraser
 2005-01-10 12:36
#50664 #50664
User since
2005-01-10
10 Artikel
BenutzerIn
[default_avatar]
Danke,
echt super von eucht. Jetz hab ichs.
Strat
 2005-01-10 22:17
#50665 #50665
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (dl )
for ($i = 0; $i<$#a; ++$i) {
[update], durch ; ersetzt[/update]
war vor etwa zehn jahren mal sinnvoll (gerade bei groesseren listen), aber das kann man besser lesbar schreiben:
Code (perl): (dl )
for my $i (0..$#a) {

Das Beispiel kann man nebenbei auch kuerzer schreiben:

Code: (dl )
1
2
3
4
5
6
my @abc = ( [ 1..3], [4..6], [7..9] );
foreach my $x (@abc) {
for my $y (@x) {
print "$y\n";
}
}

oder noch kuerzer, dafuer aber ziemlich unleserlich:
Code: (dl )
1
2
my @abc = ( [ 1..3], [4..6], [7..9] );
for (@abc) { print "$_\n" for @$_ }
\n\n

<!--EDIT|Strat|1105391180-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
format_c
 2005-01-10 22:23
#50666 #50666
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
[quote=Strat,10.01.2005, 21:17]
Code (perl): (dl )
for ($i = 0, $i<$#a, ++$i) {

war vor etwa zehn jahren mal sinnvoll (gerade bei groesseren listen), ...
[/quote]
Ich glaube das war selten sinnvoll :D

Gruß Alex\n\n

<!--EDIT|format_c|1105388635-->
Strat
 2005-01-10 22:26
#50667 #50667
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
@format_c: for (0..$#a) hat frueher mal (ich glaube, bis irgendeine der perl5.5er versionen) eine komplette liste aufgebaut, und das konnte bei
Code (perl): (dl )
1
2
3
for (0..1_000_000) {
  for (0..1_000_000) {
  # und noch ein paar mal

recht viel spass machen...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
format_c
 2005-01-10 22:32
#50668 #50668
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Ja sorry war nur korithen kackerei :)
Wenn der Kopf so ausschaut macht er mehr sinn:
Code: (dl )
for (my $i=0;$i < $#a;$i++) {#...


Gruß Alex\n\n

<!--EDIT|format_c|1105389155-->
Strat
 2005-01-10 23:07
#50669 #50669
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
ups, hatte oben einen fehler drin; es muss natuerlich for (my $i=0; $i<$#a; ++$i) { heissen... (semikolons anstelle von kommata)...

$i++ oder ++$i ist an dieser stelle auch voellig egal...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Crian
 2005-01-12 18:03
#50670 #50670
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=Strat,10.01.2005, 22:07]$i++ oder ++$i ist an dieser stelle auch voellig egal...[/quote]
Naja, ++$i ist marginal schneller, da $i++ nicht um eine temporäre Variable herumkommt, es sei denn der Compiler ist schlau genug zu erkennen, dass man den Wert gar nicht will, sondern nur den "Seiteneffekt" (=Werterhöhung) nutzt.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2005-01-10 11:58.