Что нового

[Массивы] Переписать _ArrayConcatenate для двумерных массивов

Medic84

Омега
Команда форума
Администратор
Сообщения
1,575
Репутация
335
Имеется функция
Код:
Func _ArrayConcatenate(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, 0) <> 1 Then
		If UBound($avArraySource, 0) <> 1 Then Return SetError(5, 0, 0)
		Return SetError(3, 0, 0)
	EndIf
	If UBound($avArraySource, 0) <> 1 Then Return SetError(4, 0, 0)

	Local $iUBoundTarget = UBound($avArrayTarget) - $iStart, $iUBoundSource = UBound($avArraySource)
	ReDim $avArrayTarget[$iUBoundTarget + $iUBoundSource]
	For $i = $iStart To $iUBoundSource - 1
		$avArrayTarget[$iUBoundTarget + $i] = $avArraySource[$i]
	Next

	Return $iUBoundTarget + $iUBoundSource
EndFunc   ;==>_ArrayConcatenate


Однако работает только для одномерных массивов, кто может соорудить такую для двумерных массивов?


Добавлено:
Сообщение автоматически объединено:

Забыл сказать - Без использования ByRef
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,716
Код:
Func _ArrayConcatenate2D(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) <> 2 Then
        If UBound($avArraySource, 2) <> 2 Then Return SetError(5, 0, 0)
        Return SetError(3, 0, 0)
    EndIf
    If UBound($avArraySource, 2) <> 2 Then Return SetError(4, 0, 0)
    Local $iUBoundTarget = UBound($avArrayTarget) - $iStart, $iUBoundSource = UBound($avArraySource)
    ReDim $avArrayTarget[$iUBoundTarget + $iUBoundSource][2]
    For $i = $iStart To $iUBoundSource - 1
		For $j = 0 To 1
			$avArrayTarget[$iUBoundTarget + $i][$j] = $avArraySource[$i][$j]
		Next
    Next
    Return $iUBoundTarget + $iUBoundSource
EndFunc   ;==>_ArrayConcatenate2D
 
Автор
Medic84

Medic84

Омега
Команда форума
Администратор
Сообщения
1,575
Репутация
335
Не работает как надо. Объяснияю ситуацию.
Имеется пустой двумерный массив, и одномерный - который генерирует сточки(в котором от 3 до 28 столбцов и 1 строчка) двумерного массива. Так вот не могу ссобразить как переносить полностью строки друг за другом
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,716
Приведи пример массивов.
 
Автор
Medic84

Medic84

Омега
Команда форума
Администратор
Сообщения
1,575
Репутация
335
Хотя я уже сам разобрался, правда решил по другому немного. С помощью 2х For циклов
Код:
$Temp[1] = ["14833332"]
Dim $aFullArray[$nCount][UBound($aFields)] ;Так записан в коде, в данном случае записать как пустой [10][28]
 
Верх