Так:
loop
set i = i + 1
if IsUnitInRegion(regionBase[i], GetConstructingStructure()) then
call TriggerActions(i)
exitwhen true
endif
exitwhen i == 109
endloop
Или так:
local region r = GetTriggeringRegion()
if IsUnitInRegion( r, GetConstructingStructure() ) then
call TriggerActions( LoadInteger(hash, GetHandleId(r), 0) )
endif
Принятый ответ
Хештаблицей будет быстрее:
nvc123:
nvc123:
Extremator:лол что?а что насчёт хештаблиц? Скорость их работы?всё крайне печально
скорость работы глобалок в 1,5 раза быстрее чем у хештейблов
т.е. 10 обращений к хештейблам выполняется столько же времени сколько и 15 к глобалкам
если каждую секунду не выполняется более 1000 обращений к хештейблу то не юзать хэштейблы ради оптимизации та ещё тупость
Да, и для какой цели там сверху стоит "exitwhen true"?
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Sergarr
nvc123:
Просто юнит не может быть одновременно в нескольких regionBase[i]
Если же юнит или предмет будет привязан к структуре, то тогда номер структуры можно сохранять в UserData.
Отредактирован PT153
Всё равно хеш в Jass быстрее цикла, в котором помимо обращения к ячейкам ещё и постоянный инкремент.
Вот книга, где доказано, что у хештаблиц, в которых коллизии решены с помощью цепочек, сложность поиска O(1 + a), где а - коэффициент заполнения хештаблицы, a = n / m, n - количество хранимых элементов, m - размер основного массива.