Что нового

[Массивы] Обращение и взаимодействие с подмассивом

Сообщения
142
Репутация
-3
Имеется набор информации по парам "строка, число" (массив1), которые объединены в массив10 (строка - число, строка - число), а так как групп может быть несколько, то получаем массив100 (массив11, массив12)

Код:
Local $aArmySet = [[["spy", 1], ["light", 10]], [[1, 1],[1, 1]]]

$setSelector = 0

;MsgBox(0, 'Checking', $setSelector)
   ;$aArmySetCurrent = [$aArmySet[$setSelector]]
   myFunction1 ($aArmySet, $setSelector, $oIE)

func myFunction1 ($aArmySet, $selector, $oIE)
   For $i = 0 To UBound($aArmySet[$selector]) - 1
	  $oInput =_IEGetObjByName($oIE, $aArmySet[$selector][$i][0])
	  _IEFormElementSetValue ($oInput, $aArmySet[$selector][$i][1])
   Next
EndFunc

Всё бы ничего, но я не знаю, как сделать в AutoIt, чтобы он оперировал с ячейкой (подмассивом) трехмерного массива. Каждая ячейка трёхмерного массива - это двумерный массив, с которым скрипт и работает, а перед эти выбирает нужную ячейку (подмассив) с помощью $setSelector.

Как реализовать то, что я хочу?
 
Автор
Э
Сообщения
142
Репутация
-3
Re: [Массивы] Обратиться с подмассиву

Как вообще код сделать лучше?
Код:
Local $aArmySet = [[["spy", 1], ["light", 10]], [[1, 1],[1, 1]]] ; не нравится

Local $aArmySet = [[["spy", 1], ["light", 10]]] ; падает, но нужна заготовка под 3-мерный массив или иной путь


Я пробовал $aArmySet[$setSelector], но ему это тоже не нравится, а указать на подмассив обязательно нужно, так как
Код:
UBound($aArmySet) ; даст 1, что неверно, так как нужен размер двумерного массива в ячейке



P.S. Я сижу с IE, кнопка "Редактировать" не работает.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
даст 1, что неверно, так как нужен размер двумерного массива в ячейке
У функции "Ubound" есть второй параметр, в котором указывается информацию о каком измерении многомерного массива необходимо получить.
Например :
Код:
Local $aArmySet = [[["spy", 1], ["light", 10]], [[1, 1],[1, 1]]]
MsgBox(0,'',Ubound($aArmySet,2))

Или , немного изменил Ваш массив для наглядности ( а то было и 1 и 2 измерении размер 2 , теперь в первом измерении - 3 )
Код:
Local $aArmySet = [[["spy", 1], ["light", 10]], [[1, 1],[1, 1]], [[2, 3],[4, 5]]]
MsgBox(0,'',Ubound($aArmySet,1))


Вообще то откажитесь от использования массивов массивов , нет такой задачи, где ну никак без них, а запутаться очень легко.
 
Автор
Э
Сообщения
142
Репутация
-3
Что использовать вместо массивов в данном случае?

array1 всегда имеет только два значения: element1 - строка, element2 - число.
array2 состоит минимум из одного array1
array3 состоит минимум из одного array2

В целом, может быть что-то такое:
Код:
$array20 = [["word1", 5], ["word2", 10], ... ["word4", 33]] 
$array21 = [["word1", 8], ["word3", 10], ... ["word5", 21]]
...
$array29 = [["word5", 30], ["word2", 7], ... ["word3", 30]]


В наборах array1 всегда уникальный word...

Что делать с
$array = [[["word", 11], ["word2", 5]]] ? AutoIt спотыкается на этом, он не понимает, что это массив с одним элементом.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
Когда задача ставится так :
array1 всегда имеет только два значения: element1 - строка, element2 - число.
array2 состоит минимум из одного array1
array3 состоит минимум из одного array2
, то какой ответ Вы хотите получить ? Вы на момент забудте о массивах, подойдите к задаче иначе.
 
Автор
Э
Сообщения
142
Репутация
-3
ra4o сказал(а):
Когда задача ставится так :
array1 всегда имеет только два значения: element1 - строка, element2 - число.
array2 состоит минимум из одного array1
array3 состоит минимум из одного array2
, то какой ответ Вы хотите получить ? Вы на момент забудте о массивах, подойдите к задаче иначе.
Я пишу на AutoIt 4 часа.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
Я пишу на AutoIt 4 часа.
Сейчас вопрос ещё до AutoIt не дошел, вопрос в самом алгоритме решения задачи , которую знаете только Вы.
 
Автор
Э
Сообщения
142
Репутация
-3
Задача: заполнить заданные поля, пользовательскими значениями в соответствии с шаблоном, коих может быть несколько.
Весь код в первом сообщении.
 
Верх