Array in nem Array
Leeloo5E
- perl
Hallo zusammen,
ich bastele mal wieder in Perl rum und müsste nun ein Array in nem Array bauen. Also
my @array = (@arr1, @arr2, @arr3);
Die Werte sollen dann so da rein:
push @array[0], $wert0;
push @array[1], $wert1;
push @array[2], $wert2;
Allerdings meckert der Perlinterpreter rum und sagt, push geht net fürn splice. Mit nur $array[0], sagt er, das is kein Array. Wie krieg ich denn aber nun meine Werte an die richtige Stelle?
Oder soll ich das mit nem Hash probieren? Wie gehts damit?
Gruß,
Leeloo
ich bastele mal wieder in Perl rum und müsste nun ein Array in nem Array bauen. Also
my @array = (@arr1, @arr2, @arr3);
Wenn du wirklich das willst, dann so:
my @array = (\@arr1, \@arr2, \@arr3);
Struppi.
--
[Javascript ist toll](http://javascript.jstruebig.de/) (Perl auch!)
Hallo,
Wenn du wirklich das willst, dann so:
my @array = (@arr1, @arr2, @arr3);
Werden damit nicht nur die Elemente der einzelnen Arrays hintereinander in das "Oberarray" geschrieben? Dann ist da ja auch nur wieder ein normales Array!?
Das Problem ist, dass die Anzahl der Arrays in dem Array variiert. Ich die aber trotzdem so brauche.
Ich glaub, der Link von Siechfried bringt mich da weiter.
Trotzdem danke.
Gruß,
Leeloo
Wenn du wirklich das willst, dann so:
my @array = (@arr1, @arr2, @arr3);
Werden damit nicht nur die Elemente der einzelnen Arrays hintereinander in das "Oberarray" geschrieben? Dann ist da ja auch nur wieder ein normales Array!?
Nein, im gegenteil deine Variante macht das.
Ich glaub, der Link von Siechfried bringt mich da weiter.
Das was ich dir gezeigt habe ist ein Array of Arrays.
Struppi.
Hallo,
Wenn du wirklich das willst, dann so:
my @array = (@arr1, @arr2, @arr3);
Werden damit nicht nur die Elemente der einzelnen Arrays hintereinander in das "Oberarray" geschrieben? Dann ist da ja auch nur wieder ein normales Array!?
Das was ich dir gezeigt habe ist ein Array of Arrays.
Ich glaub, damit komm ich doch nicht so recht weiter.
Bin dem Link von Siechfred gefolgt und da is ja eigentlich das, was ich will, allerdings funzt das doch net so recht. Jetzt hab ich Probleme mit der Ausgabe.
Zuerst bau ich mir per
push @{$dataset[$i]}, $entrycount;
~~~ mein Array @dataset, was ich natürlich vorher definiert habe mit `my @dataset;`{:.language-perl}
Soweit so gut. Nur an der Ausgabe scheitert es. Wenn ich sowas
~~~perl
for my $aref ( @dataset ) {
print "\t [ @$aref ],\n";
}#end for
#oder
for my $i (0 .. $#dataset) {
print [@{$dataset[$i]}];
}#end for
~~~ mache, kommt immer nur ne Fehlermeldung:
Can't use an undefined value as an ARRAY reference at ...
Das ist zum Heulen. ;-(
Gruß,
Leeloo
--
"Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra
for my $aref ( @dataset ) {
print "\t [ @$aref ],\n";
}#end for
eigentlich sollte das funktioneren.
tut es auch:
[code lang=perl]#! /usr/bin/perl -w
use strict;
my @dataset =
(
[ qw(a0 b0 c0) ],
[ qw(a1 b1 c1) ],
[ qw(a2 b2 c2) ]
);
for my $aref ( @dataset ) {
print "\t [ @$aref ],\n";
}#end for
Struppi.
--
[Javascript ist toll](http://javascript.jstruebig.de/) (Perl auch!)
Hallo,
for my $aref ( @dataset ) {
print "\t [ @$aref ],\n";
}#end foreigentlich sollte das funktioneren.
tut bei mir aber net
ich befülle mein array ja aber nicht so
[code lang=perl]
my @dataset =
(
[ qw(a0 b0 c0) ],
[ qw(a1 b1 c1) ],
[ qw(a2 b2 c2) ]
);
sondern mit push, wie auf der Seite beschrieben. Nun komm ich aber nimmer ran an die einzelnen Teile des Arrays. \*grmpf\*
Kann man erstmal so ein leeres Array in nem Array anlegen? Also so:
~~~perl
my @dataset = ( [],[],[],[], ...);
Und dann später mit push befüllen?
Ich brauch das ganze, um nen Balkendiagramm zu erstellen. Ich hab pro Datum (x-Achse) verschiedene Kategorien von denen auch nicht jede an jedem Tag vorhanden ist. Dies steht inna DB und die gibt mir eben die Werte: Datum, Anzahl (Höhe y-Achse), Kategorie aus. Ich habe allerdings eine dynamische Anzahl von Kategorien, da der Nutzer wählen kann, welche Kategorien er angezeigt bekommen möchte. D.h. für jede Kategorie wird ein Array mit Werten angelegt. Und um das eben dynamisch zu halten, sollen diese vielen Arrays gleich in ein Oberarray gepackt und dort befüllt werden. Am Ende soll das ganze wieder mit ner for-Schleife ins Diagramm gesetzt werden (mit set). Vor einem Problem stehe ich allerdings noch: Was mache ich, wenn es an einem Tag eine Kategorie nicht gibt? Die muss dann mit 0 befüllt werden an der Stelle. Aber erstmal muss ja das simpelste funktionieren ...
(Manchmal hilfts ja das Problem nochmal aufzuschreiben. Aber diesmal irgendwie nicht ... hm)
Gruß,
Leeloo
Hallo,
(Manchmal hilfts ja das Problem nochmal aufzuschreiben. Aber diesmal irgendwie nicht ... hm)
Doch, es hat geholfen: Knoten geplatzt. Die Unterarrays mit push zu befüllen, funzt wohl net, wenn man anschließend mit
for $aref ( @AoA ) {
print "\t [ @$aref ],\n";
}
versucht das Array auszugeben.
Befülle ich es jedoch per $AoA[0][1] o.ä., funzt oberer Ausgabecode und damit kann ich auch die Arrays mit Nullen befüllen *freu* Es geht ...
Gruß,
Leeloo
Doch, es hat geholfen: Knoten geplatzt. Die Unterarrays mit push zu befüllen, funzt wohl net, wenn man anschließend mit
doch klar kann man, aber du machst es offensichtlich nicht richtig.
use strict;
my @dataset;
my @a = qw(1 2 3);
my @b = qw(1 2 3);
# entweder so:
push @dataset, \@a;
push @dataset, \@b;
# oder so:
push @dataset, [ @a ];
push @dataset, [ @b ];
Struppi.
Hallo,
Doch, es hat geholfen: Knoten geplatzt. Die Unterarrays mit push zu befüllen, funzt wohl net, wenn man anschließend mit
doch klar kann man, aber du machst es offensichtlich nicht richtig.
use strict;
my @dataset;
my @a = qw(1 2 3);
my @b = qw(1 2 3);entweder so:
push @dataset, @a;
push @dataset, @b;oder so:
push @dataset, [ @a ];
push @dataset, [ @b ];
Ich bestreite nicht, dass dies auch eine Möglichkeit ist, ein Array mit einem Array zu befüllen. Allerdings kann ich die Einzel-Arrays nicht derart vordefinieren wie zuvor schon beschrieben. Ich wollte das ganze mit ` push @{ $AoA[0] }, "wilma", "betty"; `{:.language-perl} befüllen und dann per ` for my $aref ( @dataset ) { print "\t [ @$aref ],\n"; }#end for ausgeben `{:.language-perl} und das ging net.
Gruß,
Leeloo
--
"Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra
Ich bestreite nicht, dass dies auch eine Möglichkeit ist, ein Array mit einem Array zu befüllen. Allerdings kann ich die Einzel-Arrays nicht derart vordefinieren wie zuvor schon beschrieben. Ich wollte das ganze mit
push @{ $AoA[0] }, "wilma", "betty";
befüllen
Das geht tatsächlich nur, wenn in $AoA[0] bereits eine Liste initialisiert wurde. d.h. entweder, wenn du weißt wieviele Listen du brauchst sowas in der Art (geht natürlich auch als Schleife):
my @AoA = (
[], [], ... usw.
)
oder, während des Ablaufes prüfen ob die Referenz bereits vorhanden ist.
$AoA[0] = [] unless $AoA[0]; # oder ref auf ARRAY checken
push @{ $AoA[0] }, ["wilma", "betty"];
Hier musst du auch die Elemente zu einer Listenreferenz machen.
Struppi.
ich bastele mal wieder in Perl rum und müsste nun ein Array in nem Array bauen.
Warum liest du nicht die Dokumentation dazu?
http://perldoc.perl.org/perldsc.html#ARRAYS-OF-ARRAYS-array-of-arrays-AoA
Siechfred
Hallo,
Warum liest du nicht die Dokumentation dazu?
http://perldoc.perl.org/perldsc.html#ARRAYS-OF-ARRAYS-array-of-arrays-AoA
Sorry, hab ich nicht gefunden. Danke. Werd mir das mal anschauen.
Gruß,
Leeloo
Hey,
du lernst grade Referenzen und komplexe Datenstrukturen. Benutze Module wie Data::Dumper oder besser Data::Dump::Streamer, um dir Variablen ausgeben zu lassen. So siehst du die Zusammenhänge und Abhängigkeiten viel besser.