Array mit Arrays

  • Hallo an Alle,

    ich habe leider wieder ein kleines (Verständnis) Problem.

    Ich würde gerne ein Array mit Arrays als Inhalt erstellen.

    Funktioniert ja soweit eigentlich, aber wenn ich auf das innere Array schreiben will geht das nur über einen Funktionsaufruf mit Variable ByRef.

    Ist das die einzige Lösung?

    Ich habe früher viel in C programmiert und da geht das mit Pointer etwas einfacher...

    Schaut euch bitte mal mein Beispiel an.

    (Es ist nur ein Beispiel, ohne tieferen Sinn)

    Das Array-Tut von BugFix hab ich gelesen, aber leider greift er bei seinem Beispiel nur lesend auf das innere Array zu.

    Vermutlich geht das doch einfacher oder vielleicht gibts dafür eine UDF.

    Sorry, aber wie gesagt ich komme von C und muss mich noch etwas einarbeiten.

    Bitte um Aufklärung,

    Danke.


  • Funktioniert ja soweit eigentlich, aber wenn ich auf das innere Array schreiben will geht das nur über einen Funktionsaufruf mit Variable ByRef.

    Ist das die einzige Lösung?

    Ich habe früher viel in C programmiert und da geht das mit Pointer etwas einfacher...

    ByRef ist hier praktisch die Pointervariante.

    Du kannst das Array auch als ByValue übergeben und das modifizierte Array einfach returnen und in das ursprüngliche Array schreiben.

    • Offizieller Beitrag

    Ein schreibender Zugriff über gekapselte Indizes ist nicht möglich. Wenn du ein Array im Array speicherst, musst du es zum Modifizieren separat behandeln. Ob du das mit einem temporären Array löst oder eine ByRef Lösung bevorzugst, bleibt dir überlassen.

    Ich finde es meist übersichtlicher, das Array in eine temporäre Variable auszulagern und nach Änderung zurück zu schreiben.

  • Super,

    Danke euch beiden für die schnelle Antwort.

    D.h.:

    in meinem Beispiel ich würde das dann so schreiben:

    AutoIt
    ; Temp-Array vom ersten inneren Array erzeugen
    Global $aTemp = $aDatum[0]
    ; dies ist jetzt aber nur eine Kopie vom Array $aWochentage
    $aTemp[0][1] = "Neuer Montag"
    $aDatum[0] = $aTemp		; geändertes Temp-Array zurückschreiben

    bzw. über Return

    • Offizieller Beitrag

    Die beste Übersicht wirst du behalten, wenn du für den Zugriff auf innere Arrays eine Funktion erstellst. Hier mal ein Bsp. für 1D-Array:

    • Offizieller Beitrag

    Ich habe mal noch eine universale Lösung für das Speichern von 1D oder 2D Array in einem 1D-Array:

    EDIT:

    AutoIt
    ; Für die 2D-Variante:
    ; wenn im Skript die Indexwerte variabel sind (sehr wahrscheinlich), kann man das über Stringformat schnell einbinden
    Global $SF = StringFormat ; Funktion in Kurznamen covern
    ; in Funktionsaufruf einsetzen:
    _SubArrayValue($aExtern2, 1, $SF('%d,%d', $idx1, $idx2), 666)