Нужно выполнить разные действия в зависимости от значения целочисленной переменной.
Вариант 1:
Десять раз применить elseif
Вариант 2:
Триггер вызваыемый из массива
Что будет работать быстрее?
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
32
4 недели назад
2
elseif
0
27
4 недели назад
0
Если будет ещё больше, то можешь не триггер, а строку вызывать через ExecuteFunc. Эта натиска возьмёт аргументы триггера, т.е. юнита триггера/игрока и т.д. и т.п.
Ответы (2)
0
18
4 недели назад
Отредактирован EugeAl
0
rsfghd, а string array возможно сделать? Не будет лагать?
1
27
4 недели назад
1
EugeAl, чему там лагать?
0
37
4 недели назад
Отредактирован ScorpioT1000
0
Быстрее всего в случае разного поведения от входных данных - математика, включая обращение к индексу массива. Но если ты не можешь заменить много частных случаев одним алгоритмом, а нужно вызывать разные функции, то идет switch, потом if
Это, конечно, если у тебя их реально множество
Ответы (4)
0
23
4 недели назад
0
ScorpioT1000, в варике нет switch
0
5
4 недели назад
0
ScorpioT1000, входные данные хранятся в глобальных переменных, по этому передавать ничего не надо.
0
37
4 недели назад
0
CopyPaster, таймер можно стартовать или триггер, где-то недавно было обсуждение этих замеров, посмотри последние стать
0
37
4 недели назад
Отредактирован ScorpioT1000
0
CopyPaster, вот эти полезные обсуждения можно почитать
0
23
4 недели назад
Отредактирован konvan5
0
Я же правильно тебя понял, что у тебя есть 10 разных действий триггеров, которые выполняются по разным 10 условиям:
К примеру печать цифры от 1 до 9 (у меня будет 9 условий)
И нам надо максимально быстро запустить нужное действие (триггер) при каких-то условиях. В моем случае условием будет номер, который ввел игрок в чат.
Самый простой и тупой вариант в лоб это if else
Но ты сказал про 2 вариант, вызов из массива
Создаем массив триггеров
И вызываем нужный триггер по номеру как индекс массива.
Но этот способ работает, если ты можешь УСЛОВИЕ сконвертировать в НОМЕР одним действием (перебор по циклу не считается 1 действием).
То есть если условием были бы к примеру название месяца, а нам бы пришлось по циклу сравнивать строки, равна ли строка январю, потом февралю, марту и если да, то выдаем номер, который уже используем как индекс массива - это не будет считаться 1 действием и не подходит нам. Разве что хэш таблицы использовать, где по ключам мы можем получить нужное нам значение 1 действием.
Так вот, если нам получается сконвертировать условия в индекс массива или ключи для хэш таблицы в 1 действие, то я думаю, такой свитч будет быстрее, чем 10 ifelse.
Если же условия слишком специфичны и сложны - делай ifelse и не парься (разве что первыми условия ставь самые частые а в конце самые редкие)
Как уже писал ScorpioT1000 выше - главное это математика, где ты одним алгоритмом (действием) получишь нужный результат для вызова нужного действия. Я лишь описал пример.
(даже загрузил карту с этим примером)
Загруженные файлы
Ответы (4)
0
23
4 недели назад
0
Кстати, ты написал что условием у тебя будет целочисленная переменная, поэтому ответ - Вариант 2 - через массив.
0
5
4 недели назад
Отредактирован CopyPaster
0
konvan5, тут как раз да, удобнее и вроде выстрее через массив, но вопрос в том, не будет ли итоге вызов триггера медленнее
0
23
4 недели назад
Отредактирован konvan5
0
CopyPaster, нужно провести тест с нагруженным запуском триггера и со временем работы. Думаю на практике ты не будешь запускать этот триггер 1000 раз в секунду, а значит его быстродействие не так важно как читабельность. Ибо 10 else if выглядит супер не читабельно в сравнении с массивом :D
0
5
4 недели назад
0
konvan5, это будет запускаться в цикле, для каждого игрока
0
16
4 недели назад
0
вызов триггера тоже не бесплатная операция, надо сравнивать, но на промежутке в десять вариантов разница пренебрежимо мала. Вот когда ветвления вырастут до 500-1000, тогда есть смысл замерять и бороться за микросекунды
Ответы (2)
0
5
4 недели назад
Отредактирован CopyPaster
0
DracoL1ch, да вопрос именно в этом. Насколько вызов триггера это тяжёлая операция по сравнению с перебором условий.
0
5
4 недели назад
0
DracoL1ch, эти условия могут быть в цикле по этому уже довольно критично получается. И 10 условий могут превратятся в 100.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.