tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Matthias Reitinger
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
530
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Frezl
    Frezl Frezl ist offline Mitglied Brokat
    Registriert seit
    Oct 2003
    Beiträge
    473
    Hey allerseits,

    ich habe eine Frage zum Vorgehen beim Programmieren, wenn in der Sprache keine mehrdimensionalen Arrays zur Verfügung stehen.

    Ein Beispiel:
    Ich wollte neulich mit Perl eine Tabelle (CSV) einlesen, bei der mir weder die Anzahl der Zeilen, noch die Anzahl der Spalten vorher bekannt war.

    Wenn die Anzahl der Zeilen bzw. Spalten bekannt ist, ist es ja nicht so schwer, da man für jede Zeile bzw. Spalte ein eigenes Array anlegen und diese mit Pointern zu einem mehrdim. Array zusammenbauen kann.

    Da mir aber beides nicht vorher bekannt war, fiel diese Möglichkeit aus.

    Meine zweite Idee war, zur Laufzeit für jede Zeile ein Array zu erstellen, aber ich hab keine Lösung gefunden, den Variablen dynamisch Namen zu geben, die ich später auch wieder finde - z. B. den Wert des Schleifen-Zählers.

    Meine Lösung war am Ende, dass ich einfach jede Zeile direkt bearbeitet und wieder ausgegeben habe. Das war in diesem Fall möglich, aber manchmal will man ja alle Einträge erst mal vergleichen, bevor man sie wieder ausgibt.

    Daher meine Frage:
    Gibt es ein übliches Vorgehen, wie man so ein Problem ohne mehrdimensionale Arrays lösen kann?

    Viele Grüße,
    Frezl
     
    Wenn du das Gefühl hast "Cool, der Kerl konnte mir echt helfen!", dann teil es mir mit, indem du mich entsprechend bewertest!

  2. #2
    KGD92 KGD92 ist offline Mitglied Silber
    Registriert seit
    Dec 2009
    Beiträge
    64
    Eine Verknüpfte Liste mit Hilfe eines Kompositums möglicherweise!?
     

  3. #3
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.802
    Blog-Einträge
    5
    Hallo Frezl,

    Perl kann seit Version 5 mit mehrdimensionalen Arrays umgehen, daher verstehe ich dein Beispiel nicht so ganz.

    Ungeachtet dessen kann man ein zweidimensionales Array in ein eindimensionales „linearisieren“, indem man die Zeilen einfach nacheinander im Speicher ablegt. Aus einem 2D-Array mit N Spalten und M Zeilen wird so ein 1D-Array mit N*M Einträgen. Auf des Element in Spalte x und Zeile y kann man über den Index y*N+x zugreifen. Dieses Verfahren lässt sich auch auf höherdimensionale Arrays verallgemeinern.

    Grüße,
    Matthias
    Frezl bedankt sich. 
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  4. #4
    Avatar von Frezl
    Frezl Frezl ist offline Mitglied Brokat
    Registriert seit
    Oct 2003
    Beiträge
    473
    Hey Matthias,

    vielen Dank für deine aufschlussreiche Antwort! Habe vor einigen Tagen erst mit Perl begonnen und alle Suche im Internet hat mich immer zu der Antwort geführt, dass Perl keine mehrdim. Arrays könne. Freut mich, dass es doch geht

    Noch viel mehr Dank für deine Erklärung, wie man 2D-Arrays linearisieren kann Genau so eine Lösung habe ich gesucht. Es gibt ja auch noch Sprachen, die leider keine 2D-Arrays können und da werde ich es sicher noch brauchen.

    Viele Grüße,
    Frezl
     
    Wenn du das Gefühl hast "Cool, der Kerl konnte mir echt helfen!", dann teil es mir mit, indem du mich entsprechend bewertest!

  5. #5
    Avatar von Frezl
    Frezl Frezl ist offline Mitglied Brokat
    Registriert seit
    Oct 2003
    Beiträge
    473
    @ Mathias: hast du Ahnung von Perl und kannst mir da was erklären? Habe versucht, die 2D-Arrays nach diesem Tutorial zu verstehen: http://perldoc.perl.org/perldsc.html#ARRAYS-OF-ARRAYS

    Worin liegt der Unterschied zwischen diesen beiden Varianten?

    Variante A:
    Code perl:
    1
    2
    3
    4
    5
    6
    7
    
    my @mehrdim = (
                                    [00, 01, 02, 03],
                                    [10, 11, 12, 13],
                                    [20, 21, 22, 23]
                                );
                            
    print $mehrdim[1][2];

    Variante B:
    Code perl:
    1
    2
    3
    4
    5
    6
    7
    
    my $mehrdim = [
                                    [00, 01, 02, 03],
                                    [10, 11, 12, 13],
                                    [20, 21, 22, 23]
                                ];
                            
    print $mehrdim->[1][2];

    Und wie handhabe ich mit 2D-Arrays Funktionen wie push?


    Viele Grüße,
    Frezl
     
    Wenn du das Gefühl hast "Cool, der Kerl konnte mir echt helfen!", dann teil es mir mit, indem du mich entsprechend bewertest!

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 10.01.08, 17:22
  2. mehrdim. Array einlesen. + Elemente bearbeiten
    Von devilofdawn im Forum Java
    Antworten: 2
    Letzter Beitrag: 01.07.07, 17:43
  3. Programmieren in VS ohne .NET
    Von kanti im Forum VisualStudio & MFC
    Antworten: 6
    Letzter Beitrag: 29.06.07, 12:09
  4. Problem mit mehrdim. Array als Warenkorb
    Von LapisInfernalis im Forum PHP
    Antworten: 2
    Letzter Beitrag: 20.01.05, 20:14
  5. Programmieren ohne Tipperei
    Von smatcher im Forum Sonstige Sprachen
    Antworten: 0
    Letzter Beitrag: 05.07.04, 12:48

Stichworte