Rolf: Matrix ausgeben

Hallo,

eine Frage wo ich normalerweise ins Lehrbuch schauen würde, dies aber nicht zur Hand hab..., also: ich hab ein 2 dimensionales Array

$tab[0][0] wäre "links oben"
$tab[-1][-1] wäre "rechts unten" ---> so soll jedes Element auf den print:

0.0 ; 0.1 ; 0.2 usw....
1.0 ; 1.1 ; 1.2 ...
usw

Dabei steht die Anzahl der Zeilen und Spalten nicht von vornherein fest, soll also variabel sein.

Hat jemand die Lösung zur Hand?

Viele Grüße, Rolf

  1. Hi Rolf

    Es gibt eleganteres Perl aber mit

    print join(" ; ",@array);

    druckst du eine Zeile aus mit den arrayelementen aus!

    jetzt noch über die Zeilen iterieren!

    Bye Rolf

  2. hi!

    eine Frage wo ich normalerweise ins Lehrbuch schauen würde, dies
    aber nicht zur Hand hab..., also: ich hab ein 2 dimensionales
    Array

    $tab[0][0] wäre "links oben"

    So sieht doch kein zweidimensionales Array in Perl aus. Perl kann
    mehrdimensionale Arrays IMHO nur durch Referenzen erzeugen, also in
    deinem Fall $tab[0]->[0].

    Hat jemand die Lösung zur Hand?

    LanX hat dir ja schon einen Hinweis gegeben. Komplett:

    map { print join(';', @$_), "\n" } @tab;

    bye, Frank!

    1. Hi,

      So sieht doch kein zweidimensionales Array in Perl aus. Perl kann
      mehrdimensionale Arrays IMHO nur durch Referenzen erzeugen, also in
      deinem Fall $tab[0]->[0].

      Es gibt mehrere Möglichkeiten in Perl Arrayelemente zu referenzieren. das mit $tab[0][0] ist ebenfalls gültig.

      Folgende Beispiele ist lauffähig:

      @tab = (["0.0","0.1","0.2","0.3"],["1.0","1.1","1.2","1.3"],["2.0","2.1","2.2","2.3"]);
      (das hier soll nur mal als Beispiel-Array dienen)

      Die simple Variante:

      for ($i = 0; $i < @tab; $i++)
      {
       for ($j = 0; $j < @{$tab[$i]}; $j++)
       {
        print $tab[$i][$j]." ; ";
       }
       print "\n";
      }

      Is aber wegen des Semikolons auch hinter dem letzten Feld nicht so toll, könnte man natürlich abfangen aber einfacher gehts mit LanX Vorschlag:

      for ($i=0; $i < @tab; $i++)
      {
       print join(" ; ",@{$tab[$i]})."\n";
      }

      Wobei "join" eine Funktion ist, die Arrayelemente zu einem String verbindet. Das Erste Argument gibt den String an, durch den die Felder getrennt werden sollen, das Zweite ist das Array.

      Am effizientesten ist Franks Einzeilenlösung;

      map { print join(';', @$_), "\n" } @tab;

      Wobei "map" eine Anweisung, oder einen Anweisungsblock für jedes Element eines Arrays ausführt. Da in Perl ein zweidimensionales Array ein Array von Arrays (Genauer Array-Referenzen) ist wird jeweils als Element @{$tab[$i]} an den Anweisungsblock übergeben.

      Ich hab das jetzt noch mal so ausführlich beschrieben, da Rolf schrieb er habe kein Lehrbuch zur Hand und der Einzeiler eventuell für Ihn etwas undurchschaubar sein könnte.

      Gruß
      Marcus

      1. Hi Marcus;

        Ich hab das jetzt noch mal so ausführlich beschrieben, da Rolf schrieb er habe kein Lehrbuch zur Hand und der Einzeiler eventuell für Ihn etwas undurchschaubar sein könnte.

        Herzlichen Dank! Ich hab den Schnippel vom Frank eingebaut und der tut. Warum - das lese ich nächste Woche nach *g

        In Perl lerne ich wahrscheinlich nie aus; viele Grüße, Rolf

        PS: Mit Büchern ists so ein Ding: Entweder die liegen noch in de Buchhandlung oder beim Kollegen auf dem Tisch oder Zuhause (im Falle Du bist auf Arbeit) ... und wenn Du eins gekauft hast isses in 2-3 Monaten total veraltet. Hmm. Trifft nicht ganz für PERL Bücher zu.

        Naja, zum Glück gibts dieses Forum !

  3. Dank Euch, geht prima!

    Viele Grüße, Rolf

    PS: Zu bewunderen auf http://i-netlab.de/cgi-bin/webtable.cgi