amel27
Цитата:
кроме создания "фиктивного" лист-контрола ничего не приходит в голову, а это имхо из разряда извращений
|
Это тот самый лист котроль над которым я извращался
тут?

(пост номер 694).
Немного поизвращался в другом направлении, и сделал нужные для себя функции связанные с массивами, но подумал может кому то ещё пригодятся

(комментов нет, но думаю запустив примеры всё довольно быстро станет ясно):
Код:

#include <Array.au3>
Dim $Arr1[4]
$Arr1[0] = UBound($Arr1) - 1
$Arr1[1] = "Hello"
$Arr1[2] = "My"
$Arr1[3] = "Friend!"
Dim $Arr2[4]
$Arr2[0] = UBound($Arr2) - 1
$Arr2[1] = "AutoIt"
$Arr2[2] = "Is"
$Arr2[3] = "The best!"
_ArrayDisplay($Arr1, "Display the first array")
_ArrayDisplay($Arr2, "Display the second array")
_ArrayJoin($Arr1, $Arr2, 1)
_ArrayDisplay($Arr1, "Demo of _ArrayJoin() function")
_ArrayClone($Arr1, 2)
_ArrayDisplay($Arr1, "Demo of _ArrayClone() function")
_ArrayDeleteClones($Arr1)
_ArrayDisplay($Arr1, "Demo of _ArrayDeleteClones() function")
_ArrayClear($Arr1)
_ArrayDisplay($Arr1, "Demo of _ArrayClean() function")
Func _ArrayJoin(ByRef $Array1, ByRef $Array2, $JoinedArray=1)
If IsArray($Array1) And IsArray($Array2) Then
If $JoinedArray = 1 Then
For $iArr = 1 To UBound($Array2) - 1
ReDim $Array1[UBound($Array1) + 1]
$Array1[UBound($Array1) - 1] = $Array2[$iArr]
Next
$Array1[0] = UBound($Array1) - 1
Else
For $iArr = 1 To UBound($Array1) - 1
ReDim $Array2[UBound($Array2) + 1]
$Array2[UBound($Array2) - 1] = $Array1[$iArr]
Next
$Array2[0] = UBound($Array2) - 1
EndIf
SetError(0)
Else
SetError(1)
Return -1
EndIf
EndFunc
Func _ArrayClone(ByRef $Array, $Repeat=1)
If IsArray($Array) Then
Local $TempArr = $Array
For $iR = 1 To $Repeat
For $iArr = 1 To UBound($TempArr) - 1
ReDim $Array[UBound($Array) + 1]
$Array[UBound($Array) - 1] = $TempArr[$iArr]
Next
$Array[0] = UBound($Array) - 1
Next
SetError(0)
Return 1
Else
SetError(1)
Return -1
EndIf
EndFunc
Func _ArrayDeleteClones(ByRef $Array)
If IsArray($Array) Then
Local $StringWithDelValue
For $iD = 1 To UBound($Array) - 1
$FindInArr = _ArraySearch($Array, $Array[$iD])
If $FindInArr <> $iD Then $StringWithDelValue &= $Array[$iD] & "|"
Next
If $StringWithDelValue <> "" Then
$TempArrOfIndexesString = StringSplit($StringWithDelValue, "|")
If IsArray($TempArrOfIndexesString) Then
For $iI = 1 To $TempArrOfIndexesString[0]
$CurrentIndexToDel = _ArraySearch($Array, $TempArrOfIndexesString[$iI])
If $CurrentIndexToDel = -1 Then ExitLoop
_ArrayDelete($Array, $CurrentIndexToDel)
Next
Else
_ArrayDelete($Array, StringReplace($StringWithDelValue, "|", ""))
EndIf
$Array[0] = UBound($Array) - 1
SetError(0)
Return 1
Else
SetError(0)
Return 0
EndIf
Else
SetError(1)
Return -1
EndIf
EndFunc
Func _ArrayClear(ByRef $Array)
If IsArray($Array) Then
For $iArr = 1 To UBound($Array) - 1
_ArrayDelete($Array, $iArr)
Next
$Array[0] = 0
SetError(0)
Return 1
Else
SetError(1)
Return -1
EndIf
EndFunc