Multiarray zusammenfassen

  • Hallo,

    ich habe zwei Arrays die jeweils aus zwei Spalten bestehen:

    Array1 und Array2 besteht jeweils aus der ID und einem Textfeld. Nun sollen bei zu einem Array werden und zwar dann mit drei Zeilen: "Quellenarraybezeichnung, ID, Textfeld"

    Irgendwie komme ich da mit _ArrayConcatenate nicht wirklich weiter. Ich kann zwar beide Arrays zusammenfügen, aber die erste Zeile (Quellenarraybezeichnung) fehlt. Gibt es da einen Trick?

  • Hallo recaptcha,

    abhängig davon, was Du unter "zwei Spalten" verstehst, könntest Du das Zusammenführen der beiden Arrays auch "von Hand" implementieren.

    Mit

    [autoit]

    Ubound()

    [/autoit]

    kannst Du die Größe und Dimension der Arrays ausgeben lassen und ein entsprechendes drittes Array deklarieren.
    Wenn dieses wirklich drei Zeilen haben soll, wäre die Anzahl der Spalten gleich der Zahl der Elemente aus Array1 + Array2.
    Mit einer Schleife könntest Du alle Elemente aus Array1 und Array2 in Array3 einfügen und den Namen des Arrays sowie "ID und Textfeld" eintragen lassen.

  • Hi,

    stimmt bei Autoit heißt es ja Dimensionen. Zum Verständnis, ich checke in einer IF Funktion ob wirklich zwei Dimensionen vorhanden sind, und dann wie füge ich die Arrays zu einem Multiarray zusammen?

  • Hallo recaptcha,

    die Anzahl der Spalten eines Arrays muss nicht unbedingt auch der Anzahl der Dimensionen entsprechen.
    Beispielsweise ist folgendes 3D-Array (mit 10*10*10 Elementen) deshalb möglich:

    [autoit]

    $a[10][10][10]

    [/autoit]

    . Allerdings verwendest Du vermutlich ein zweidimensionales Array.

    Für Deine Anwendung empfiehlt sich u. U. die Verwendung von Arrays im Array (s. u. a. folgendes Thema: Link).

    Ansonsten benötigtst Du eine Schleife, die die Arrays nacheinander durchläuft. Innerhalb dieser Schleife sollte eine weitere Schleife jedes Array bis zum jeweils letzten Element durchlaufen und in Array3 (inklusive des Namens des gerade durchlaufenen Arrays) eintragen.

  • indem du ein neues Array erstellst , dass so groß ist , wie beide Quellarrays zusammen.
    Dann solltest du noch For-Schleifen benutzen und UBound.
    mehr brauchst du nicht

    • Offizieller Beitrag

    Also der Begriff "Multiarray" ist in AutoIt nicht vorhanden und beschreibt auch nicht dein vorhaben.
    Du hast zwei 2-Dimensionale Array, die du zu einem 2-Dimensionalen Array zusammenfügen möchtest unter Erweiterung einer "Spalte" in der die Quelle hinterlegt wird.
    Das einfachste ist die Arrays jeweils um eine Spalte zu erweitern ( ReDim ) und in die neue Spalte den von dir gewünschten Quellnamen bei jedem Element einzutragen ( For-Schleife ). Dann hast du zwei Arrays die du nur noch zusammenfügen mußt, wie bereits von Alcros beschrieben. Oder du nutzt meine Funktion _Array2DJoin() ;)

  • Ich nehme mal an es war so gemeint. Vermutlich kann mans aber geschickter und besser lösen, hab mir die Lösung von Bugfix nicht angesehn.

    Spoiler anzeigen
    [autoit]


    #include <array.au3>
    dim $Array1[4][2] = [ [1,"eins"], _
    [2,"zwei"], _
    [3,"drei"], _
    [4,"vier"] _
    ]

    [/autoit] [autoit][/autoit] [autoit]

    dim $Array2[2][2] = [ [10,"zehn"], _
    [20,"zwanzig"] _
    ]

    [/autoit] [autoit][/autoit] [autoit]

    $newTotalSize = UBound($Array1)+UBound($Array2)
    Dim $arrayJoin[$newTotalSize][3]

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($arrayJoin)-1
    ConsoleWrite($i & @CRLF)
    if $i <= UBound($Array1)-1 Then
    $k = $i
    ConsoleWrite($k & @CRLF)
    $arrayJoin[$i][0] = "array1source"
    For $j = 1 to UBound($arrayJoin,2)-1
    $arrayJoin[$i][$j]=$Array1[$k][$j-1]
    Next
    Else
    $k = $i - UBound($Array1)
    ConsoleWrite($k & @CRLF)
    $arrayJoin[$i][0] = "array2source"
    For $j = 1 to UBound($arrayJoin,2)-1
    $arrayJoin[$i][$j]=$Array2[$k][$j-1]
    Next
    EndIf
    Next
    _ArrayDisplay($arrayJoin)

    [/autoit]
  • Habe Dein Anliegen so verstanden:

    Quellcode
    [autoit]

    #include-once
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Dim $a1[11], $a2[11]

    [/autoit] [autoit][/autoit] [autoit]

    $a1[0] = "a1"
    $a2[0] = "a2"

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To UBound($a1)-1
    $a1[$i] = Random(0, 10, 1)
    $a2[$i] = Random(0, 10, 1)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($a1)
    _ArrayDisplay($a2)

    [/autoit] [autoit][/autoit] [autoit]

    $n = UBound($a1)-1 + UBound($a2)-1 +1
    Dim $a3[3][$n]

    [/autoit] [autoit][/autoit] [autoit]

    $a3[0][0] = "Array"
    $a3[1][0] = "ID"
    $a3[2][0] = "Inhalt"

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($a3)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To UBound($a1)-1
    $a3[0][$i] = $a1[0]
    $a3[1][$i] = $i
    $a3[2][$i] = $a1[$i]
    _ArrayDisplay($a3)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To UBound($a2)-1
    $x = $i + UBound($a1)-1
    $a3[0][$x] = $a2[0]
    $a3[1][$x] = $i
    $a3[2][$x] = $a2[$i]
    _ArrayDisplay($a3)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($a3)

    [/autoit] [autoit][/autoit] [autoit]

    Exit

    [/autoit]

    Z. 26 - Z. 39 könnte man auch noch in einer Schleife verschachteln.