表长度操作符的性能表现

Lua有 # 操作符用于计算被用作数组的表的“长度”。在像C这样的语言中,计算完某个东西的长度后,通常不会再次计算它。例如:int len = strlen(string);

在Lua中有何不同?它们之间的效率有差别吗?

(显然,对于相当小的表格,这可能不会显示出明显的差异,但知道这一点从来不会有坏处。)

点赞
用户107090
用户107090

#操作符对于表的值并不会被 Lua 内部存储:每次调用时会重新计算。

Lua 使用二分搜索,所以其成本对于表大小的对数而言。详见代码 http://www.lua.org/source/5.2/ltable.c.html#luaH_getn。换句话说,成本本质上是恒定的,除了超大的表。

2013-08-13 11:38:04