Что нового

Аналог _ArrayInsert для многомерных массивов.

MCR

Новичок
Сообщения
22
Репутация
0
Есть массив заполненный, данными, если условие выполняется нужно добавить строки с данными в этот массив.
Есть ли функции типа _ArrayInsert для многомерных массивов
Код:
Global $aTest[8][5] = [ [ 0 ]]
;начало цикла
If Not @error Then
; Добавить строку с данными
;конец цикла
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Re: Как добавить строку в многомерный массив

Код:
Redim
 

hellm

Новичок
Сообщения
32
Репутация
1
Re: Как добавить строку в многомерный массив

Есть специфическая реализация для ассоциативного массива (тут про этот странный массив)

Код:
Func _aa_insert($aTarget, $sInsert, $sDelimiter = "|")
	If Not _aa_check($aTarget) = 4 Then Return -1							; array check
	Local $aTemp = $aTarget
	Local $k = UBound($aTemp, 2)											; number of colomns in the given array
	Local $aInsert = StringSplit($sInsert, $sDelimiter, 2)					; number of element in the given string to insert
	Local $sTemp = ""
	$aTemp = _aa_sort($aTemp)
	ReDim $aTemp[UBound($aTemp)+1][UBound($aTemp, 2)]						; enlarge the array size by 1 string

	If $k = UBound($aInsert) Then											; number of colomns in the given array and string is the same
		For $i = UBound($aTemp) - 1 To 1 Step -1
			If $aInsert[0] <= $aTemp[$i][0] And $aInsert[0] > $aTemp[$i-1][0] Then ExitLoop
			For $j = 0 To UBound($aTemp, 2) - 1
				$aTemp[$i][$j] = $aTemp[$i-1][$j]
			Next
		Next

		For $j = 0 To UBound($aTemp, 2) - 1
			$aTemp[$i][$j] = $aInsert[$j]
		Next

	EndIf

	Return $aTemp

EndFunc



Вот,а тут сортировка. (реализована на основе сортировки Шелла)
Код:
Func _aa_sort($aTarget, $iColomn = 0, $iPrevNum = 0)
	If Not _aa_check($aTarget) Then Return -1								; see _aa_check
	Local $aTemp = $aTarget
	Local $iStepD[] = [1, 4, 13, 40, 121, 364, 1093, 3280, 9841]
	Local $d, $i, $j, $t

	If $iPrevNum = 1 Then													; additional colomn with position in unsorted array
		ReDim $aTemp[UBound($aTemp)][UBound($aTemp, 2)+1]
		For $i = 0 To UBound($aTemp) - 1
			$aTemp[$i][UBound($aTemp, 2)-1] = $i
		Next
	EndIf

	For $d = UBound($iStepD) - 1 To 0 Step -1
		If $iStepD[$d] < UBound($aTemp) Then
			For $i = $iStepD[$d] To UBound($aTemp) - 1
				For $j = $i To $iStepD[$d] Step - $iStepD[$d]
					If $aTemp[$j][$iColomn] < $aTemp[$j-$iStepD[$d]][$iColomn] Then
						For $k = 0 To UBound($aTemp, 2) - 1
							$t = $aTemp[$j][$k]
							$aTemp[$j][$k] = $aTemp[$j-$iStepD[$d]][$k]
							$aTemp[$j-$iStepD[$d]][$k] = $t
						Next
					EndIf
				Next
			Next
		EndIf
	Next

	Return $aTemp

EndFunc
 
Верх