2016-07-04 3 views
2

Мне нужно проверить, является ли конкретная строка одним из множества заданных строк.Доступ к таблице и вызов функции + условное определение: что быстрее?

два способа сделать это пришло мне на ум: создание таблицы для возврата истинна на определенном значении

local isParticular = { 
    [string1] = true, 
    [string2] = true 
} 

print(isParticular[string1]) -- true 
print(isParticular[randomString]) -- nil -> false 

Или установив функцию, чтобы проверить его с помощью условного определения

function isParticular(s) 
    return s == string1 or s == string2 
end 

print(isParticular(string1)) -- true 
print(isParticular(randomString)) -- false 

Насколько я понимаю, метод таблицы будет принимать одинаковое время как для любой из строк, так и для разных строк, тогда как вызов функции из-за оценки короткого замыкания займет меньше времени для string1 и больше времени для string2 и randomString.

Кроме того, как вызов функции, так и доступ к таблице известны тем, что вызывают небольшую накладную нагрузку, но, возможно, оценка короткого замыкания может иметь значение (в более медленном режиме, я думаю, особенно считается, что у меня есть более двух конкретных строк и что в большинстве случаев строка не будет соответствовать ни одному из них).

Какой метод следует использовать?

+0

Существует только один способ: профиль как! Я сомневаюсь, что вы увидите разницу: если вы планируете использовать цепочку «или», это говорит мне, что у вас нет слишком много предметов, которые вам нужно проверить, поэтому не нужно беспокоиться о масштабировании. –

ответ

2

Хэш-таблица поиска будет превосходить ваш функциональный поиск большого набора данных. Итак, перейдите по первому методу:

local isParticular = { 
    string1 = true, 
    string2 = true 
} 

print(isParticular[string1]) -- true 
print(isParticular[randomString]) -- nil -> false 
+0

Только то, что я подумал! Спасибо за подтверждение. – user6245072

Смежные вопросы