4

Lua には#、配列として使用されているテーブルの「長さ」を計算する演算子があります。C などの言語では、何かの長さを計算した後、通常、再度計算することはありません。例えばint len = strlen(string);

これはLuaで何か違うのですか?一方は他方よりも効率が悪いですか?

(明らかに、これはかなり小さなテーブルでは顕著な違いを示さないでしょうが、知っておくことは決して悪いことではありません。)

4

1 に答える 1

12

テーブルの の値は#、Lua によって内部的に保存されません。呼び出されるたびに計算されます。

Lua は二分探索を使用するため、コストはテーブルのサイズの対数になります。http://www.lua.org/source/5.2/ltable.c.html#luaH_getnのコードを参照してください。つまり、巨大なテーブルを除いて、コストは基本的に一定です。

于 2013-08-13T11:38:04.660 に答える