Что нового

удаление одного значения в двухмерном массиве

Rjevsky

Новичок
Сообщения
102
Репутация
4
Есть большой двухмерный массив
Код:
$massiv[22][22]

Как удалить из этого массива значение, к примеру, $massiv[12][2]?
 
Автор
R

Rjevsky

Новичок
Сообщения
102
Репутация
4
Мне нужно по аналогии с _ArrayDelete
 

axlwor

Скриптер
Сообщения
657
Репутация
147
по какой аналогии?
_arraydelete удаляет строку двухмерного массива
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Rjevsky [?]
Мне нужно по аналогии с _ArrayDelete
А чем _ArrayDelete() не угодил?

Код:
#include <Array.au3>
Dim $aM[22][22]

For $i = 0 To UBound($aM, 1) -1
	For $ii = 0 To UBound($aM, 2) - 1
	$aM[$i][$ii] = Random(1, 1000, 1)
	Next
Next

_ArrayDisplay($aM)
MsgBox(0, "", $aM[12][2])
_ArrayDelete($aM, 12)
_ArrayDisplay($aM)
MsgBox(0, "", $aM[12][2])



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

Rjevsky
Вы не сможите удалить один элемент из не ассоциативного массива. В индексном массиве (2D) все ячейки взаимосвязаны, и количество ячеек в строках не может быть разным.
Вы сможете лишь присвоить ячейке пустое значение.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Rjevsky
Вот только так можно решить вашу задачу:
Код:
#include <Array.au3>
Dim $aM1[22]
Dim $aM2[22]


For $i = 0 To UBound($aM1) -1
	For $ii = 0 To UBound($aM2) - 1
	$aM2[$ii] = Random(1, 1000, 1)
	Next
	$aM1[$i] = $aM2
Next

_ArrayDeleteEx($aM1, 12, 2)

Func _ArrayDeleteEx(ByRef $a_Array, $i_1D, $i_2D)
	
	For $i = 0 To UBound($a_Array) -1
		$a_Temp = $a_Array[$i]
		If $i = $i_1D Then
			For $ii = 0 To UBound($a_Temp) - 1
				If $ii = $i_2D Then
					_ArrayDisplayEx($a_Array, "До $aM1[" &$i_1D& "][" &$i_2D& "]", $i_1D, $i_2D)
					_ArrayDelete($a_Temp, $ii)
					$a_Array[$i] = $a_Temp
					_ArrayDisplayEx($a_Array, "После $aM1[" &$i_1D& "][" &$i_2D& "]", $i_1D, $i_2D)
				EndIf
			Next
		EndIf
	Next
EndFunc ;==>_ArrayDeleteEx

Func _ArrayDisplayEx($a_Array, $s_Title = "", $i_1D = 0, $i_2D = 0)
	For $i = 0 To UBound($a_Array) -1
		$a_Temp = $a_Array[$i]
		If $i = $i_1D Then
			For $ii = 0 To UBound($a_Temp) - 1
				If $ii = $i_2D Then
					_ArrayDisplay($a_Temp, $s_Title)
				EndIf
			Next
		EndIf
	Next
EndFunc ;==>_ArrayDisplayEx
 
Автор
R

Rjevsky

Новичок
Сообщения
102
Репутация
4
Благодарю за помощь. Я нашёл как обойти удаление с устраивающим меня результатом.
 
Верх