#include #include-once Func _Array_Display($Array) _ArrayDisplay() ConsoleWrite("Array[" & UBound($Array, 0) & "] : [" & @CRLF) Switch UBound($Array, 0) Case 0 ConsoleWrite($Array & @CRLF) Case 1 _Array_Display1D($Array) Case 2 _Array_Display2D($Array) EndSwitch ConsoleWrite("]" & @CRLF) EndFunc Func _Array_Display1D($Array) Local $text = "" For $i = 0 To UBound($Array, 1)-1 $text &= $Array[$i] & ", " Next $text = StringTrimRight($text, 2) & @CRLF ConsoleWrite($text) EndFunc Func _Array_Display2D($Array) Local $text = "" For $i = 0 To UBound($Array, 1)-1 For $j = 0 To UBound($Array, 2)-1 $text &= $Array[$i][$j] & ", " Next $text = StringTrimRight($text, 2) & @CRLF Next ConsoleWrite($text) EndFunc Func _ArrayEquals($Array1, $Array2) Local $equals = True Local $ubound = UBound($Array1, 0) If($ubound = UBound($Array2, 0)) Then For $i = 0 To $ubound If(UBound($Array1, $i) <> UBound($Array2, $i)) Then $equals = False ExitLoop EndIf Next If($equals) Then Switch $ubound Case 0 $equals = $Array1 = $Array2 Case 1 For $i = 0 To UBound($Array1, 1)-1 If($Array1[$i] <> $Array2[$i]) Then $equals = False ExitLoop EndIf Next Case 2 For $i = 0 To UBound($Array1, 1)-1 For $j = 0 To UBound($Array1, 2)-1 If($Array1[$i][$j] <> $Array2[$i][$j]) Then $equals = False ExitLoop 2 EndIf Next Next EndSwitch EndIf Else $equals = False EndIf Return $equals EndFunc Func _Array_Find($Array, $Search, $Start = 0) Local $Indice = -1 For $i = $Start To UBound($Array, 1)-1 If($Array[$i] = $Search) Then $Indice = $i ExitLoop EndIf Next Return $Indice EndFunc Func _Array_Find2D($Array, $Search, $element, $Start = 0) Local $Indice = -1 For $i = $Start To UBound($Array, 1)-1 If($Array[$i][$element] = $Search) Then $Indice = $i ExitLoop EndIf Next Return $Indice EndFunc Func _Array_FindDouble2D($Array, $Search1, $element, $Search2, $element2, $Start = 0) Local $Indice = -1 For $i = $Start To UBound($Array, 1)-1 If($Array[$i][$element] = $Search1 And $Array[$i][$element2] = $Search2) Then $Indice = $i ExitLoop EndIf Next Return $Indice EndFunc Func _Array_FindTriple2D($Array, $Search1, $element, $Search2, $element2, $Search3, $element3, $Start = 0) Local $Indice = -1 For $i = $Start To UBound($Array, 1)-1 If($Array[$i][$element] = $Search1 And $Array[$i][$element2] = $Search2 And $Array[$i][$element3] = $Search3) Then $Indice = $i ExitLoop EndIf Next Return $Indice EndFunc Func _Array_FindAll($Array, $Search, $Start = 0) Local $Indice = -1 For $i = $Start To UBound($Array, 1)-1 If($Array[$i] = $Search) Then $Indice = $i EndIf Next Return $Indice EndFunc Func _Array_FindAll2D($Array, $Search, $element, $Start = 0) Local $Retour[1] = [0] For $i = $Start To UBound($Array, 1)-1 If($Array[$i][$element] = $Search) Then $Retour[0] += 1 _Array_Add($Retour, $i) EndIf Next Return $Retour EndFunc Func _Array_FindAllByArray2D($Array, $ArraySearch, $Element, $StartArray = 0, $StartArraySearch = 0) Local $Retour[1] = [0] For $i = $StartArray To UBound($Array, 1)-1 For $j = $StartArraySearch To UBound($ArraySearch, 1)-1 If($Array[$i][$element] = $ArraySearch[$j]) Then $Retour[0] += 1 _Array_Add($Retour, $i) EndIf Next Next Return $Retour EndFunc Func _Array_ExtractAll2D($Array, $Search, $element, $Start = 0) Local $Retour[1][UBound($Array, 2)] $Retour[0][0] = 0 For $i = $Start To UBound($Array, 1)-1 If($Array[$i][$element] = $Search) Then $Retour[0][0] += 1 ReDim $Retour[$Retour[0][0]+1][UBound($Retour, 2)] For $j = 0 To UBound($Array, 2)-1 $Retour[$Retour[0][0]][$j] = $Array[$i][$j] Next EndIf Next Return $Retour EndFunc Func _Array_ExtractAllByArray2D($Array, $ArraySearch, $element, $StartArray = 0, $StartArraySearch = 0) Local $Retour[1][UBound($Array, 2)] $Retour[0][0] = 0 For $i = $StartArray To UBound($Array, 1)-1 For $j = $StartArraySearch To UBound($ArraySearch, 1)-1 If($Array[$i][$element] = $ArraySearch[$j]) Then $Retour[0][0] += 1 ReDim $Retour[$Retour[0][0]+1][UBound($Retour, 2)] For $j = 0 To UBound($Array, 2)-1 $Retour[$Retour[0][0]][$j] = $Array[$i][$j] Next EndIf Next Next Return $Retour EndFunc Func _Array_Add(ByRef $Array, $Add, $Indice = -1) Local $iUBound = UBound($Array, 1) - 1 If $Indice > $iUBound Then Return SetError(3, 0, -1) Switch UBound($Array, 0) Case 1 _Array_Add1D($Array, $Add, $Indice) Case 2 _Array_Add2D($Array, $Add, $Indice) EndSwitch EndFunc Func _Array_Add1D(ByRef $Array, $Add, $Indice) ReDim $Array[UBound($Array, 1)+1] If($Indice < 0) Then $Indice = UBound($Array, 1)-1 EndIf For $i = UBound($Array, 1)-2 To $Indice Step -1 $Array[$i+1] = $Array[$i] Next $Array[$Indice] = $Add Return $Indice EndFunc Func _Array_Add2D(ByRef $Array, $Add, $Indice) ReDim $Array[UBound($Array, 1)+1][UBound($Array, 2)] If($Indice < 0) Then $Indice = UBound($Array, 1)-1 EndIf For $i = UBound($Array, 1)-2 To $Indice Step -1 For $j = 0 To UBound($Array, 2)-1 $Array[$i+1][$j] = $Array[$i][$j] Next Next For $j = 0 To UBound($Array, 2)-1 $Array[$Indice][$j] = $Add[$j] Next EndFunc Func _Array_Delete(ByRef $Array, $Indice) If Not IsArray($Array) Then Return SetError(1, 0, 0) Local $iUBound = UBound($Array, 1) - 1 If $Indice < 0 Then Return SetError(2, 0, 0) If $Indice > $iUBound Then Return SetError(3, 0, 0) Switch UBound($Array, 0) Case 1 _Array_Delete1D($Array, $Indice) Case 2 _Array_Delete2D($Array, $Indice) Case Else Return SetError(4, 0, 0) EndSwitch Return $iUBound EndFunc Func _Array_Delete1D(ByRef $Array, $Indice) Local $MoveItem = "" Local $iUBound = UBound($Array, 1) - 1 For $i = $Indice To $iUBound If($i = $iUBound) Then $MoveItem = "" Else $MoveItem = $Array[$i + 1] EndIf $Array[$i] = $MoveItem Next If($iUBound <> 0) Then ReDim $Array[$iUBound] EndIf EndFunc Func _Array_Delete2D(ByRef $Array, $Indice) Local $MoveItem = "" Local $iUBound = UBound($Array, 1) - 1 Local $iSubMax = UBound($Array, 2) - 1 For $i = $Indice To $iUBound For $j = 0 To $iSubMax If($i = $iUBound) Then $MoveItem = "" Else $MoveItem = $Array[$i + 1][$j] EndIf $Array[$i][$j] = $MoveItem Next Next If($iUBound <> 0) Then ReDim $Array[$iUBound][$iSubMax + 1] EndIf EndFunc