Lua には#
、配列として使用されているテーブルの「長さ」を計算する演算子があります。C などの言語では、何かの長さを計算した後、通常、再度計算することはありません。例えばint len = strlen(string);
これはLuaで何か違うのですか?一方は他方よりも効率が悪いですか?
(明らかに、これはかなり小さなテーブルでは顕著な違いを示さないでしょうが、知っておくことは決して悪いことではありません。)
Lua には#
、配列として使用されているテーブルの「長さ」を計算する演算子があります。C などの言語では、何かの長さを計算した後、通常、再度計算することはありません。例えばint len = strlen(string);
これはLuaで何か違うのですか?一方は他方よりも効率が悪いですか?
(明らかに、これはかなり小さなテーブルでは顕著な違いを示さないでしょうが、知っておくことは決して悪いことではありません。)
テーブルの の値は#
、Lua によって内部的に保存されません。呼び出されるたびに計算されます。
Lua は二分探索を使用するため、コストはテーブルのサイズの対数になります。http://www.lua.org/source/5.2/ltable.c.html#luaH_getnのコードを参照してください。つまり、巨大なテーブルを除いて、コストは基本的に一定です。