- Offizieller Beitrag
Nach langem mal wieder was zum Thema Array. (Nur was Kleines)
In manchen Sprachen gibt es RemoveIf als native Funktion, hier mal für AutoIt anzuwenden auf 1D-Arrays.
AutoIt
;~ ============================================================ Bsp. ===
#include <Array.au3>
Func _NotEven($a)
Return Mod($a, 2)
EndFunc
$NotEven = _NotEven
Local $a[] = [1,2,3,4,5,6,7,8,9,10]
$aEven = _Array_RemoveIf($NotEven, $a)
_ArrayDisplay($aEven)
;~ ====================================================================
; #FUNCTION# ====================================================================================================================
; Name ..........: _Array_RemoveIf
; Description ...:
; Syntax ........: _Array_RemoveIf($_ConditionFunc, $_Array[, $_iStart = 0])
; Parameters ....: $_ConditionFunc - Funktion die die Arrayelemente auf eine Bedingung prüft
; $_Array - das Array mit allen zu prüfenden Elementen
; $_iStart - [optional] Der Startindex. Standard ist 0.
; Return values .: Erfolg - Array ohne die Elemente, auf die die Bedingung zutrifft
; Fehler - das Ursprungsarray, @error 1
; Author ........: BugFix ( autoit@bug-fix.info )
; ===============================================================================================================================
Func _Array_RemoveIf($_ConditionFunc, $_Array, $_iStart=0)
If Not IsFunc($_ConditionFunc) Then Return SetError(1,0,$_Array)
Local $aNew[UBound($_Array)], $n = $_iStart
If $_iStart > 0 Then
For $i = 0 To $_iStart -1
$aNew[$i] = $_Array[$i]
Next
EndIf
For $i = $_iStart To UBound($_Array) -1
If Not $_ConditionFunc($_Array[$i]) Then
$aNew[$n] = $_Array[$i]
$n += 1
EndIf
Next
ReDim $aNew[($_iStart = 0 ? ($n > $_iStart ? $n : 1) : ($n > $_iStart ? $n : $_iStart))]
Return $aNew
EndFunc
Alles anzeigen