Zugriff auf Array

  • Funktioniert es nicht irgendwie eine Variable beim Zugriff auf ein Array noch zu verändern?

    Also z.B

    [autoit]

    #include<array.au3>

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

    Dim $aArray[4] = [1,2,3]

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

    ;_arraydisplay($aArray)

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

    $i = 1
    ConsoleWrite($aArray[2] & @CRLF);OK
    ConsoleWrite($aArray[1 + 1] & @CRLF);OK
    ConsoleWrite($aArray[$i += 1] & @CRLF);NEIN!?
    ConsoleWrite($aArray[$i + 1] & @CRLF);NEIN!?

    [/autoit][autoit][/autoit][autoit][/autoit]
    • Offizieller Beitrag

    Hi,

    @3:
    Das "Problem" ist, denke ich, dass eine Zuweisung nicht durch den neuen Wert der Variable ersetzt wird.

    [autoit]

    $i += 1

    [/autoit]

    wird zwar ausgeführt und der Wert von $i verändert, aber fällt dann im Interpreter raus und kann deshalb kein Array-Index sein.
    Ist natürlich nicht so hübsch, manchmal nutze ich das auch ganz gerne, aaaaber es ist auch nicht unbedingt gut lesbar…

    @4:
    Würde mich stark wundern, wenn das nicht ginge!? Hast du das wirklich mit genau dem Code von oben getestet? Habe gerade leider kein AutoIt zur Hand :(.

    Johannes

  • Anscheinend hat AutoIt ein Problem mit der Kurzschreibweise.
    ConsoleWrite($aArray[$i = $i+1] & @CRLF) geht, aber ist sinnlos, da eine Zuweisung in AutoIt immer False zurückgibt...

  • @4 Funktiniert!!
    Merkwürdig ich bin der Meinung alle Schreibweisen, auch diese, getestet zu haben....

    Nun gut dann kann ich jetzt ne mengen Code entsorgen (Nein ich muss nicht auf Toilette)

    Danke :)

  • Hallo,

    [autoit]

    ConsoleWrite($aArray[$i + 1] & @CRLF)

    [/autoit]


    So funktioniert es.

    Siehe hier:

    [autoit]

    #include<array.au3>

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

    Dim $aArray[4] = [1,2,3]

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

    ;_arraydisplay($aArray)

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

    $i = 1
    ConsoleWrite($aArray[2] & @CRLF);OK
    ConsoleWrite($aArray[1 + 1] & @CRLF);OK
    ;ConsoleWrite($aArray[$i += 1] & @CRLF);NEIN!?
    ConsoleWrite($aArray[$i + 1] & @CRLF);NEIN!? <-- DOCH
    ConsoleWrite($i & @CRLF) ; Die Variable wird dadurch nicht verändert!

    [/autoit]

    Mfg

  • Wenn $i wirklich verändert werden soll, was afaik nur in dem einen Fall der so nicht funktioniert eintreten würde kann man das noch mithilfe von assign lösen:

    [autoit]


    #include<array.au3>

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

    Dim $aArray[5] = [1,7,12,55,89]

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

    ;_arraydisplay($aArray)

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

    $i = 1
    ConsoleWrite($aArray[2] & @CRLF); sollte 12 ergeben
    ConsoleWrite($aArray[1 + 1] & @CRLF); sollte 12 ergeben
    ConsoleWrite($aArray[Assign("i", $i + 2)*$i] & @CRLF); $i sollte nun 3 sein, die abfrage also 55 ergeben
    ConsoleWrite($aArray[$i + 1] & @CRLF); sollte 89 ergeben, da i mittlerweile 3 ist und nochmals mit 1 addiert wird, $i ist unverändert 3

    [/autoit]

    Aber wirklich toll ist so ein code nicht, würde davon abraten sowas zu verwenden...

    Einmal editiert, zuletzt von misterspeed (31. August 2012 um 19:39)