Что нового

Слияние массивов

ZaEzzz

Новичок
Сообщения
28
Репутация
2
Доброго времени суток всем!
Столкнулся с одной проблемкой:
Имеется массив $a и массив $b. Оба массива имеют одинаковое количество столбцов, как их слить в один с помощью стандартных функций?
Код:
#include <Array.au3>
Dim $a[2][2]=[['1','2'],['3','4']]
Dim $b[2][2]=[['5','6'],['7','8']]
_ArrayAdd($a, $b)
_ArrayDisplay($a, ['5','6'])

Выводит ошибку:
Код:
1.au3 (5) : ==> Error in expression.:
_ArrayAdd($a, ['7','8'])
_ArrayAdd($a, ^ ERROR
>Exit code: 1    Time: 0.211

А этот вариант вообще не несет полезной информации:
Код:
#include <Array.au3>
Dim $a[2][2]=[['1','2'],['3','4']]
Dim $b[2][2]=[['5','6'],['7','8']]
Dim $c[2][2]
_ArrayAdd($a, $b)
_ArrayDisplay($a, '?'
)
В итоге я в тупике - писать костыли для такой мелочи совсем нет желания при наличии такой функции как _ArrayAdd() , а вот принцип ее работы мне пока не понятен :(
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
ZaEzzz [?]
В итоге я в тупике - писать костыли для такой мелочи совсем нет желания при наличии такой функции как _ArrayAdd() , а вот принцип ее работы мне пока не понятен
_ArrayAdd применим только для одномерных массивов
Для многомерных надо писать самопальную.
Если поискать, где-то уже публиковали

А если массивы одномерные, то объединяются : _ArrayConcatenate
Вот инадо писать(искать) сразу самопальную _ArrayConcatenateEx
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Вот так можно изменить ф-ию ArrayConcatenate:
Код:
Func _2DArrayConcatenate(ByRef $avArrayTarget, Const ByRef $avArraySource, $iStart = 0)
	If Not IsArray($avArrayTarget) Then Return SetError(1, 0, 0)
	If Not IsArray($avArraySource) Then Return SetError(2, 0, 0)
	If UBound($avArrayTarget, 2) <> UBound($avArraySource, 2) Then  Return SetError(3, 0, 0)

	Local $iUBoundTarget1 = UBound($avArrayTarget, 1) - $iStart, $iUBoundTarget2 = UBound($avArrayTarget, 2) 
	Local $iUBoundSource1 = UBound($avArraySource, 1)
	
	ReDim $avArrayTarget[ $iUBoundTarget1 + $iUBoundSource1][ $iUBoundSource1]
	For $i = $iStart To $iUBoundSource1 - 1
		For $j= 0 To $iUBoundTarget2 - 1
			$avArrayTarget[$iUBoundTarget1 + $i] [$j]= $avArraySource[$i][$j]
		Next
	Next

	Return $iUBoundTarget1 + $iUBoundSource1
EndFunc
 
Верх