Allen 2D Arrays einen Wert zuweisen UDF

  • So, da H2112 heute jeder 2D Array den Wert 0 zuweisen wollte, habe ich mal Kurzerhand ne UDF geschrieben.

    Die UDF ist nichts großes, aber da manche selbst nicht drauf kommen :D

    $Array ist eure Array, und $Whatever ist der Wert ;)

    [autoit]


    Func _2DArray_SetAll(ByRef $Array, $Whatever)
    For $i = 0 To UBound($Array, 1) - 1
    For $i1 = 0 To UBound($Array, 2) - 1
    $Array[$i][$i1] = $Whatever
    Next
    Next
    EndFunc ;==>_2DArray_SetAll

    [/autoit]

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

    Einmal editiert, zuletzt von Mattthias (10. September 2010 um 16:17)

  • Und hier meine erweiterte Variante

    [autoit]

    Func SetArray(ByRef $aArray, $sSet = -1) ;Array mit einem Wert befüllen
    Local $x, $y
    if not isarray($aArray) then return -1
    Switch UBound($aArray, 0)
    Case 1
    For $x = 0 To UBound($aArray) - 1
    $aArray[$x] = $sSet
    Next
    Case Else
    For $x = 0 To UBound($aArray, 0) - 1
    For $y = 0 To UBound($aArray) - 1
    $aArray[$y][$x] = $sSet
    Next
    Next
    EndSwitch
    EndFunc ;==>SetArray

    [/autoit]
  • Weil sie nicht korrekt arbeitet.

    [autoit]

    For $x = 0 To UBound($aArray, 0) - 1

    [/autoit]


    Ubound(... , 0) gibt an wieviele Dimensionen ein Array hat nicht wieviel Elemente (in unserem Fall Spalten) in in der 2. Dimension stehen.
    Hat man also z.B: ein Array so definiert: $Array[100][4] werden nur die ersten 2 Spalten mit dem Wert beschrieben - logisch denn er geht die Spalten ja nur von 0 bis 1 durch da UBound($aArray, 0) bei diesem Array = 2 ist.

    Und der Geschwindigkeitsvorteil ist nur dann da wenn in der ersten Dimension des Arrays mehr Elemente stehen als in der 2.
    Würde man ein Array so definieren: $aArray[4][200] wäre die Funktion von Matthias schneller.
    Hängt damit zusammen ob erst die Spalten oder die Zeilen abgearbeitet werden (die beiden For-Schleifen) - je nach dem kann man damit die Anzahl der Schleifenaufrufe verringern.

    Einmal editiert, zuletzt von AspirinJunkie (10. September 2010 um 16:44)