MeaDolphi
Пользователь
Здравствуйте. В одной теме я наткнулся на ответ модератора, который предоставил код используя функцию table.HasValue.
Код для примера.
В чем я вижу здесь проблему эффективности? Данный метод перебирает таблицу следующим образом: сначала он обращается к первому ключу, после чего сравнивает значение со вторым аргументом функции. Так итерации продолжаются, пока не найдут значение равное аргументу, либо пока таблица себя не исчерпает.
Как же нужно подходить к поиску необходимых данных в таблице?
Для начала нужно научиться правильно составлять таблицы. Пример на отрывке кода предоставленном ранее.
Теперь нужные нам данные выступают не ключем, а значением. Это позволит нам обращаться по ключу к таблице и получать в возврате значение истина.
Применение на нашем примере указанном ранее:
Код стал короче и элегантнее, а так же мы не тратим время на процесс перебора таблица, а напрямую проверяем существование данного элемента в таблице.
Используйте данный вид таблиц, когда вам необходимо только проверять, а не перебирать. При переборе таблицы в таком виде придется применять pairs, вместо ipairs, что так же приведёт к потери эффективности кода.
Спасибо за внимание к данной теме.
Код для примера.
Lua:
local ply = LocalPlayer()
local tableTeams = {
TEAM_POLICE,
TEAM_CHIEF,
TEAM_THIEF,
}
if table.HasValue(tableTeams, ply:Team()) then
print("SUCCESSFUL")
end
В чем я вижу здесь проблему эффективности? Данный метод перебирает таблицу следующим образом: сначала он обращается к первому ключу, после чего сравнивает значение со вторым аргументом функции. Так итерации продолжаются, пока не найдут значение равное аргументу, либо пока таблица себя не исчерпает.
Как же нужно подходить к поиску необходимых данных в таблице?
Для начала нужно научиться правильно составлять таблицы. Пример на отрывке кода предоставленном ранее.
Lua:
local tableTeams = {
[TEAM_POLICE] = true,
[TEAM_CHIEF] = true,
[TEAM_THIEF] = true,
}
Теперь нужные нам данные выступают не ключем, а значением. Это позволит нам обращаться по ключу к таблице и получать в возврате значение истина.
Применение на нашем примере указанном ранее:
Lua:
if tableTeams[ply:Team()] then
print("SUCCESSFUL")
end
Код стал короче и элегантнее, а так же мы не тратим время на процесс перебора таблица, а напрямую проверяем существование данного элемента в таблице.
Используйте данный вид таблиц, когда вам необходимо только проверять, а не перебирать. При переборе таблицы в таком виде придется применять pairs, вместо ipairs, что так же приведёт к потери эффективности кода.
Спасибо за внимание к данной теме.
Последнее редактирование: