Что нового

[Массивы] Eval для массива

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Пытаюсь получить значение массива, формируя имя массива и индексы в цикле. Но Eval() не хочет понимать массивов или может я что-то не так делаю? Просто массивов около 50, и каждый имеет размерность 12х7, без циклов дюже тяжко все описывать.
Вот примерчик для иллюстрации проблемки. Двумерный даже не трогаю :(
Код:
;Dim $arr[3][3] = [[1,2,3],[2,3,4],[3,4,5]]
Dim $arr2[3] = [0,9,8]

ConsoleWrite($arr2[2] & @CRLF)

ConsoleWrite(Eval($arr2 & '[2]') & @CRLF) ; индекс
$n = 2
ConsoleWrite(Eval('arr' & $n & '[2]') & @CRLF) ; имя

$k_1 = 14
$k_2 = 5
ConsoleWrite(Eval('k_2') & @CRLF) ; с обычными переменными всё работает
ConsoleWrite(Eval('k_' & $n) & @CRLF)
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Eval() с индексами не работает.

Код:
Dim $Array[2] = [1, 2]

$Temp = Eval('Array')
ConsoleWrite($Temp[0] & ' ' & $Temp[1] & @CR)


В твоем случае лучше использовать массив массивов.

Код:
Dim $A1[2] = [0, 1]
Dim $A2[2] = [2, 3]
Dim $A3[2] = [4, 5]
Dim $A4[2] = [6, 7]
Dim $A5[2] = [8, 9]

Dim $B[5] = [$A1, $A2, $A3, $A4, $A5]

For $i = 0 To 4
	$A = $B[$i]
	ConsoleWrite($A[0] & ' ' & $A[1] & @CR)
Next
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Yashied [?]
лучше использовать массив массивов
Или Execute:

Код:
Dim $arr2[3] = [0,9,8]

ConsoleWrite($arr2[2] & @CRLF)
ConsoleWrite(Execute('$arr2[2]') & @CRLF)
 
Автор
Redline

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Спасибо за быструю помощь!
Вокруг массива массивов уже сам начал ходить - непонятно как к нему обращаться(а тут пример)
Но выберу Execute(), чтобы не усложнять скрипт.
 
Верх