Struct via "Struct.Element" ansprechen - Beta 3.3.9.5

  • Aber Sorry an eukalyptus, jetzt haben wir deinen Thread ge-highjackt. :whistling:
    Keine böse Absicht.

    ja, sorry war keine Absicht.

    Aber ... eins muss ich fix noch los werden.
    Mit der Aktuelle Beta ist der ternäre Operator sogar schneller wie ein "If ... Then ... Else ... EndIf" :P

    [autoit]

    Local $Loops = 1000000, $Years = 2, $i, $Test

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

    $Timer = TimerInit()
    For $i = 0 To $Loops
    $Test = ($Years > 1) ? 'Jahre' : 'Jahr'
    Next
    ConsoleWrite(' ternär: ' & TimerDiff($Timer) & @CRLF)

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

    $Timer = TimerInit()
    For $i = 0 To $Loops
    If $Years > 1 Then
    $Test = 'Jahre'
    Else
    $Test = 'Jahr'
    EndIf
    Next
    ConsoleWrite('If...Else: ' & TimerDiff($Timer) & @CRLF)

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

    $Timer = TimerInit()
    For $i = 0 To $Loops
    $Test = _IFOR('$Years > 1', 'Jahre', 'Jahr')
    Next
    ConsoleWrite(' _IFOR:' & TimerDiff($Timer) & @CRLF)

    [/autoit]


    Ergibt bei mir:

    Code
    ternõr: 799.567721673811
    If...Else: 982.689106436273
        _IFOR: 8255.16073135715


    PS: Dein "_IFOR" sprengt da den rahmen :D

  • Ha. So simple und doch effektiv :D. So kann man den Interpreter auch missbrauchen ^^. Der Objektzugriff Struct.Array(Item) kommt nicht mit Variablen klar (wahrschein ein Pointerproblem). Das lässt sich aber leicht umgehen, indem man den Wert vorher aus der Variable holt. Mit ... Eval() :D.

    [autoit]

    tStruct = DllStructCreate("int X; int Y; int Z; int A[4];")
    tStruct.X = 12
    tStruct.Y = 34

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

    tStruct.X += 1
    tStruct.Z = tStruct.X + tStruct.Y

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

    tStruct.A(1) = 11
    tStruct.A(2) = 22
    tStruct.A(3) = 33
    tStruct.A(4) = 44

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

    For i = 1 To 4
    ConsoleWrite("+ " & DllStructGetData(tStruct, "A", i) & " / " & tStruct.A(Eval("i")) & @CRLF)
    Next

    [/autoit]
  • Und ich dachte das würde statisch gelinkt vor dem Ausführen und deshalb wäre keine dynamische ansprache der Structelemente möglich.
    Aber Minx ist derjenige der die Lücke im System findet^^
    Eval ist nicht so schön wie eine Funktion. Lieber die Func benutzen.