Neues Array aus Splate eines Arrays erstellen

  • Hallo Leute,

    ich habe ein Array mit mehreren Dimensionen als z.B. $Array[150][4]. Nun möchte ich die Spalte 2 des Arrays nehmen und daraus ein neues Array erstellen.

    Bin bisher nicht auf eine einfachere Lösung gekommen, außer natürlich das Array zu durchlaufen und ein neues Array mit den Werte zu füllen.

    Hat jemand eine einfachere Lösung?

    Vielen Dank schon mal!

    lg
    s.koni

    Einmal editiert, zuletzt von s.koni (5. März 2014 um 14:05) aus folgendem Grund: Als abgeschlossen markiert

  • Bin bisher nicht auf eine einfachere Lösung gekommen, außer natürlich das Array zu durchlaufen und ein neues Array mit den Werte zu füllen.

    Was einfacheres gibt es nicht in AutoIt.
    Wenn du es dir in eine Funktion packst ist es aber doch auch nicht kompliziert:

    Spalte aus Array extrahieren
    [autoit]

    #include <Array.au3>

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

    #Region Array erstellen
    Global $Array[150][4]

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

    For $i = 0 To UBound($Array) - 1
    $Array[$i][0] = $i
    $Array[$i][1] = $i * 2
    $Array[$i][2] = $i * 3
    $Array[$i][3] = $i * 4
    Next
    #EndRegion Array erstellen

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

    $a_Column = _ArrayGetRow($Array, 1)
    If Not @error Then _ArrayDisplay($a_Column)

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

    ; extrahiert eine Spalte aus einem 2D-Array
    Func _ArrayGetRow(ByRef $Array, Const $iColumn)
    Local Const $N = UBound($Array)
    Local $a_NewArray[$N]

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

    If UBound($Array, 0) <> 2 Then Return SetError(1, 0, $a_NewArray) ; Kein 2D-Array
    If ($iColumn >= UBound($Array, 2)) Or ($iColumn < 0) Then Return SetError(2, 0, $a_NewArray) ; Sinnfreie Angabe für iColumn

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

    For $i = 0 To $N - 1
    $a_NewArray[$i] = $Array[$i][$iColumn]
    Next
    Return $a_NewArray
    EndFunc ;==>_ArrayGetRow

    [/autoit]


    Wenn du unbedingt ohne sichtbare(!) Schleifen auskommen willst kannst du eigentlich nur so einen Blödsinn wie folgendes verwenden:

    Blöde Methode um Arrayspalte zu extrahieren
    [autoit]

    #include <Array.au3>

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

    #Region Array erstellen
    Global $Array[150][4]

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

    For $i = 0 To UBound($Array) - 1
    $Array[$i][0] = $i
    $Array[$i][1] = $i * 2
    $Array[$i][2] = $i * 3
    $Array[$i][3] = $i * 4
    Next
    #EndRegion Array erstellen

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

    _ArrayTranspose($Array)
    _ArrayDelete($Array, 3)
    _ArrayDelete($Array, 2)
    _ArrayDelete($Array, 0)
    _ArrayTranspose($Array)
    _ArrayDisplay($Array)

    [/autoit]
  • Noch nichts übersehen ;) Aber Melba23 vom engl. Forum hat gerade die Array UDF überarbeitet und die enthält dann eine solche Funktion.