bräuchte Hilfe bei vereinfachungen von if then Abfragen

  • hallo Leutz,

    kann ich folgenden Code auch leichter lösen ?

    [autoit]

    If not IsArray($array1) And not IsArray($array2) And not IsArray($array3) Then
    ;code1
    ElseIf not IsArray($array1) And not IsArray($array2) And IsArray($array3) Then
    ;code2
    ElseIf not IsArray($array1) And IsArray($array2) And not IsArray($array3) Then
    ;code3
    ElseIf not IsArray($array1) And IsArray($array2) And IsArray($array3) Then
    ;code4
    ElseIf IsArray($array1) And not IsArray($array2) And not IsArray($array3) Then
    ;code5
    ElseIf IsArray($array1) And not IsArray($array2) And IsArray($array3) Then
    ;code6
    ElseIf IsArray($array1) And IsArray($array2) And not IsArray($array3) Then
    ;code7
    ElseIf IsArray($array1) And IsArray($array2) And IsArray($array3) Then
    ;code8
    EndIf

    [/autoit]

    Gruß
    Pre

  • Hinsichtlich Geschwindigkeit könnte folgendes eine mögliche Optimierung sein:
    - Motivation: es wird der Ausdruck nur einmal ausgewertet.

    [autoit]

    $array1 = True ; müsste jeweils mit isArray() überprüft werden
    $array2 = True
    $array3 = True

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

    $result = $array3+$array2*2+$array1*4

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

    Switch $result
    Case 0;alle false
    ;code1
    Case 1;array3 ist true
    ;code2
    Case 2;
    ;code3
    Case 3;array3 und 2
    ;code 4
    Case 4;array1
    ;code5
    Case 5;array1 und 3
    ;code6
    Case 6;array2 und 1
    ;code7
    Case 7;array3 und 2 und 1
    ;code8
    EndSwitch

    [/autoit]


    PS: Select Case ist (wenn ichs richtig in Erinnerung habe) noch ein stückchen schneller.

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • Hier quasi nochmal das gleiche wie bereits von XovoxKingdom gepostet - allerdings ist hier die "Berechnung" des Flags evtl. verständlicher.

    Spoiler anzeigen
    [autoit]

    Local $iFlag = 0
    If IsArray($aArray_1) Then $iFlag += 1
    If IsArray($aArray_2) Then $iFlag += 2
    If IsArray($aArray_3) Then $iFlag += 4

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

    Switch $iFlag
    Case 0
    ; Kein $aArray_n ist Array.
    Case 1
    ; $aArray_1 ist der einzig gültige Array.
    Case 2
    ; $aArray_2 ist der einzig gültige Array.
    Case 3
    ; $aArray_1 und $aArray_2 sind gültig.
    Case 4
    ; $aArray_3 ist der einzig gültige Array.
    Case 5
    ; $aArray_1 und $aArray_3 sind gültig
    Case 6
    ; $aArray_2 und $aArray_3 sind gültig
    Case 7
    ; $aArray_3, $aArray_2 und $aArray_1 sind gültig.
    EndSwitch

    [/autoit]