6 Arrays in einem Array zusammenfügen?

  • hi leute,

    ich habe folgendes prog:

    ich würde gerne 6 verschiedene arrays in ein array packen wie ja auch der titel schon verrät.

    also ich hab:
    Dim $Ardir1[10]
    Dim $Ardir2[12]
    Dim $ArReg1[8]
    Dim $ArReg2[4]
    Dim $ArReg3[8]
    Dim $ArReg4[15]

    und würde nun halt gerne wie ganzen inhalte alles array in ein neues array schreiben weiß aber nun nicht genau wie man das ohne großen auswand hinbekommen könnte.

    hoffe mal das mit gehofen werden kann^^ (es eilt etwas weil ich morgen in urlaub fahr ;) )

    EDIT: am besten das alles in einer FOR das würde am besten passen glaub ich.

    Einmal editiert, zuletzt von .::Mignon::. (14. Februar 2008 um 15:44)

  • Hi Mignon,

    hab mal ein bisschen rumprobiert, aber sieht schwer nach Bastelarbeit aus :S
    Du mußt also die Arrays einzeln in das neue rüberpacken.

    Hier mal grob der Ansatz

    [autoit]

    Dim $aNeu[6][15]

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

    For $i = 1 To UBound( $Ardir1 )
    $aNeu[1][$i] = $Ardir1[$i]
    Next

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

    For $i = 1 To UBound( $Ardir2 )
    $aNeu[2][$i] = $Ardir2[$i]
    Next

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

    usw...

    [/autoit]
  • Warum fängst Du nicht einfach mal an mit der For-Schleife ! Vorschlag z.B.:

    [autoit]

    Dim $ArrayOut[57]
    $index = 0

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

    For $i = 0 to UBound($Ardir1)-1
    $ArrayOut[$index] = $ardir1[$i]
    $index += 1
    Next

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

    ; nächste For-Schleife u.s.w.

    [/autoit]

    Ist aber wie geasgt nur ein Ansatz und nicht getestet.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • ich hab ja auch sone ähnliche möglichkeit aber das is so umstänlich und unpraktisch darum hab ich ja auch was ganz einfahces gesucht.

    hier meine löschung: (die aber auch doof is)

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    Dim $ArG[1]
    For $a = 1 To $ArR1[0]
    _ArrayAdd($ArG,$ArR1[$a])
    Next
    For $b = 1 To $ArR2[0]
    _ArrayAdd($ArG,$ArR2[$b])
    Next
    For $c = 1 To $ArR3[0]
    _ArrayAdd($ArG,$ArR3[$c])
    Next
    For $d = 1 To $ArR4[0]
    _ArrayAdd($ArG,$ArR4[$d])
    Next
    For $e = 1 To $ArD1[0]
    _ArrayAdd($ArG,$ArD1[$e])
    Next
    For $f = 1 To $ArD1[0]
    _ArrayAdd($ArG,$ArD1[$f])
    Next

    [/autoit]
  • Ausser das ich nicht mit '_ArrayAdd()' sondern so wie Micha_he machen würde, geht es wohl nicht anders.
    Also hast du es doch schon ;)

    • Offizieller Beitrag

    Hier mal als Code:

    [autoit]

    Dim $Ardir1[10]
    Dim $Ardir2[12]
    Dim $ArReg1[8]
    Dim $ArReg2[4]
    Dim $ArReg3[8]
    Dim $ArReg4[15]
    Dim $arALL[6]=[$Ardir1,$Ardir2,$ArReg1,$ArReg2,$ArReg3,$ArReg4]
    For $i = 1 To UBound($arALL)-1
    _Array2DJoin($arALL[0], $arALL[$i])
    Next
    ; $arALL[0] (also $Ardir1) enthält dann alle Arrays

    [/autoit]
  • Habe mal eine ähnliche Func wie BugFix geschrieben ...

    Spoiler anzeigen
    [autoit]

    ; #FUNCTION# ;===============================================================================
    ;
    ; Name...........: _Array2D_FromArrays
    ; Description ...: Returns 2D Array from several Arrays
    ; Syntax.........: _Array2D_FromArrays($sArrays_n, $flag = 0)
    ; Parameters ....: $sArrays_n - String of Arraynames delimetered by |
    ; $flag - [optional] Sort Arrays by size. (Default = 0, Sort = 1)
    ; Return values .: Success - a two-dimensional Array.
    ; Failure - Returns 0 and Sets @Error:
    ; |0 - No error.
    ; |1 - Invalid string in $sArrays_n
    ; |2 - Invalid Array in $sArrays_n
    ; Author ........: Greenhorn
    ; Modified.......:
    ; Remarks .......: $arExample[0][0] contains number of elemants in first dimension,
    ; $arExample[0][1] contains number of elemants in second dimension.
    ; Related .......:
    ; Link ..........;
    ; Example .......; Yes
    ;
    ; ;==========================================================================================
    Func _Array2D_FromArrays($sArrays_n, $flag = 0)

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

    Local $i1stDim, $i2ndDim, $iMax2ndDim
    If Not IsString($sArrays_n) Then
    Return SetError(1, 0, 0)
    Else
    If StringRegExp($sArrays_n, '(\$)') Then
    $sArrays_n = StringRegExpReplace($sArrays_n, '(\$)', '')
    EndIf
    If StringInStr($sArrays_n, '|') Then
    $arArrays_n = StringSplit($sArrays_n, '|')
    $i2ndDim = $arArrays_n[0]
    For $i = 1 To $arArrays_n[0]
    $arArrays_n[$i] = Eval($arArrays_n[$i])
    If Not IsArray($arArrays_n[$i]) Then
    Return SetError(2, 0, 0)
    Else
    If UBound($arArrays_n[$i])-1 > $i1stDim Then
    $i1stDim = UBound($arArrays_n[$i])
    EndIf
    EndIf
    Next
    Else
    $arArray_n = Eval($sArrays_n)
    If Not IsArray($arArray_n) Then
    Return SetError(2, 0, 0)
    Else
    $i1stDim = UBound($arArray_n)
    $i2ndDim = 1
    EndIf
    EndIf
    EndIf

    If $flag Then $arArrays_n = _ArraySortSizeOfArrays($arArrays_n)

    Local $ar2D_Array[$i1stDim][$i2ndDim]
    $ar2D_Array[0][0] = $i1stDim-1
    $ar2D_Array[0][1] = $i2ndDim

    For $c = 1 To $arArrays_n[0]
    Local $iRow = 1
    For $value In $arArrays_n[$c]
    If IsInt($value) Then
    If $value = UBound($arArrays_n[$c])-1 Then
    ContinueLoop
    Else
    $ar2D_Array[$iRow][$c-1] &= $value
    $iRow += 1
    ContinueLoop
    EndIf
    EndIf
    $ar2D_Array[$iRow][$c-1] &= $value
    $iRow += 1
    Next
    Next

    Return $ar2D_Array

    EndFunc

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

    Func _ArraySortSizeOfArrays($arArrays)

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

    Local $arSort[$arArrays[0] + 1]
    $arSort[0] = $arArrays[0]
    $iLast = 0
    For $i1 = 1 To $arArrays[0]
    $iSize_1 = UBound($arArrays[$i1])
    $iMax = 0
    For $i2 = 1 To $arArrays[0]
    $iSize_2 = UBound($arArrays[$i2])
    If $iSize_2 > $iMax Then
    If $iLast = 0 Then
    $iMax = $iSize_2
    $arSort[$i1] = $arArrays[$i2]
    ElseIf $iSize_2 < $iLast Then
    $iMax = $iSize_2
    $arSort[$i1] = $arArrays[$i2]
    EndIf
    EndIf
    Next
    $iLast = $iMax
    Next

    Return $arSort

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

    EndFunc

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

    ; #EXAMPLE# ;================================================================================
    #include-once
    #include <Array.au3>
    #include <File.au3>
    $arFirst = _FileListToArray(@WindowsDir & '\Media', '*', 1)
    $arSecond = _FileListToArray(@WindowsDir & '\Fonts', '*', 1)
    $arThird = _FileListToArray(@WindowsDir & '\Cursors', '*', 1)

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

    $ar2D = _Array2D_FromArrays('$arFirst|$arSecond|$arThird')
    If @error = 1 Then MsgBox(0, '', 'Error!')
    _ArrayDisplay($ar2D, 'Sorted Array')

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

    $ar2D = _Array2D_FromArrays('$arFirst|$arSecond|$arThird', 1)
    If @error = 1 Then MsgBox(0, '', 'Error!')
    _ArrayDisplay($ar2D, 'Sorted Array')
    ; ;==========================================================================================

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

    Gruß
    Greenhorn


  • Vielen Dank Xenobiologist!
    Kann es sein das es in der Hilfe (englisch 3.2.10.0) fehlt?
    Bei mir ist es nicht drin ?(