Oki
Продвинутый
- Сообщения
- 452
- Репутация
- 63
Известно, что AutoIt в массиве разрешает иметь не более 16 миллионов элементов. Насмешкой выглядит при этом разрешение иметь 64 размерности. Ведь для того, чтобы размерность имела практическое применение, её собственный размер должен быть по меньшей мере 2 (кроме очень хитрых относительно полезных трюков с размером 1 по отдельным размерностям, до которых мало кто догадается, да и то сомнительной эффективности), но тогда даже 24 размерности с минимальным размером 2 по каждой дадут 16777216 элементов, что противоречит возможностям AutoIt.
Обойти это ограничение возможно различными уловками. Вопрос в том, как это сделать эффективнее всего. Для затравки и в доказательство возможности приведу одно решение с надеждой на то, что сообщество предложит (наи-)более эффективное по удобству применения и скорости выполнения.
Обойти это ограничение возможно различными уловками. Вопрос в том, как это сделать эффективнее всего. Для затравки и в доказательство возможности приведу одно решение с надеждой на то, что сообщество предложит (наи-)более эффективное по удобству применения и скорости выполнения.
Код:
;Dim $aTest[5000][5000] ; Эта строка закомментирована после проверочного теста, предсказуемо приведшего к ошибке.
Dim $avTable[5000] ; Имитация двумерного массива.
Dim $aiRow[5000] ; Массив для работы со строкой двумерного массива.
For $iRow = 0 To 4999
For $iColumn = 0 To 4999
$aiRow[$iColumn] = $iRow * $iColumn ; Составление таблицы умножения от 0 до 4999.
Next
$avTable[$iRow] = $aiRow ; Занесение строки в имитацию двумерного массива.
Next
$iRow = 4500 ; Тестовый первый индекс.
$iColumn = 4600 ; Тестовый второй индекс.
$aiRow = $avTable[$iRow] ; Считывание нужной строки.
MsgBox(4096, "", $iRow & " * " & $iColumn & " = " & $aiRow[$iColumn]) ; Считывание и вывод требуемого элемента.
Последнее редактирование: