Creat0R
Цитата:
сделал нужные для себя функции связанные с массивами
|
несколько замечаний... и свой вариант.

- во избежание проблем индексные переменные в функциях нужно объявлять как
Local;
- пустые массивы (счетчик со значением 0) нужно обрабатывать отдельно перед входом в цикл;
- учитывая, что счет индекса идет всегда с единицы, одной проверки
IsArray() явно недостаточно. На самом деле все приведенные функции работают с пользовательским типом данных - "массив со счетчиком"… вот на принадлежность этому типу и надо проверять. Более того, при наличии уверенности в корректности массива можно обойтись без лишнего пользования
UBound() - достаточно взять значение по индексу 0.
- параметр
$JoinedArray в функции
_ArrayJoin() имхо избыточный, при нужде поменять параметры проблемы не составит:
Код:

If $JoinedArray Then
_ArrayJoin ($arr1, $arr2)
Else
_ArrayJoin ($arr2, $arr1)
EndIf
- зачем нужна
_ArrayClear(), если можно обычным оператором присвоения переинициализировать массив?
- в функции
_ArrayReplace две строки перепутаны местами.
Код:

#include <Array.au3>
Func _IsCountArray (ByRef $arr)
If IsArray ($arr) Then
If $arr[0] = UBound ($arr)-1 Then Return True
EndIf
Return False
EndFunc
Func _ArrayJoin (ByRef $arrFrom, ByRef $arrTo)
If _IsCountArray($arrFrom) And _IsCountArray($arrTo) Then
Local $i, $n=0
If $arrFrom[0] =0 Then Return 0
For $i=1 To $arrFrom[0]
$n+=_ArrayAdd ($arrTo, $arrFrom [$i])
Next
$arrTo[0]+=$n
Return $n
EndIf
SetError (1)
Return -1
EndFunc
Func _ArrayClone (ByRef $arr, $count = 1)
Local $i, $n=0, $tmp = $arr
If _IsCountArray ($arr) Then
For $i=1 To $count
$n+=_ArrayJoin ($tmp, $arr)
Next
Return $n
EndIf
SetError(1)
Return -1
EndFunc
Func _ArrayDeleteClones (ByRef $arr, $iCaseSense = 0)
If _IsCountArray ($arr) Then
Local $i, $n=0, $iClone
If $arr[0] <2 Then Return 0
For $i=$arr[0] To 2 Step -1
$iClone = _ArraySearch ($arr, $arr[$i], 1, $i-1, $iCaseSense)
If $iClone >0 Then
$n+=_ArrayDelete ($arr, $iClone)
$i-=1
EndIf
Next
$arr[0] = UBound($arr) -1
Return $n
EndIf
SetError(1)
Return -1
EndFunc
Func _ArrayReplace (ByRef $Array, $ValueToReplace, $NewValue)
Local $i, $n=0
If _IsCountArray($Array) And IsString ($ValueToReplace) Then
For $i = 1 To $Array[0]
If StringInStr ($Array[$i], $ValueToReplace) Then
$Array[$i] = StringReplace ($Array[$i], $ValueToReplace, $NewValue)
$n+=1
EndIf
Next
Return $n
EndIf
SetError(1)
Return -1
EndFunc
Цитата:
А как определять является ли массив двухмерным, или нет?
|
UBound ($Array,0) вернет размерность массива