2013-08-13 2 views
4

У Lua есть оператор # для вычисления «длины» таблицы, используемой в качестве массива. На языке, таком как C, после того, как вы вычислили длину чего-то, вы, как правило, не вычисляете его снова. например int len = strlen(string);Производительность для оператора длины таблицы

Разве это не так в Lua? Является ли он менее эффективным, чем другой?

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

ответ

9

Значение # для таблицы не хранятся внутренне Lua: это вычисленный каждый раз, когда он вызывается.

Lua использует двоичный поиск, и поэтому стоимость логарифмическая по размеру таблицы. См. Код: http://www.lua.org/source/5.2/ltable.c.html#luaH_getn. Другими словами, стоимость по существу постоянна, за исключением огромных таблиц.

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