Way*_*art 5 performance lua lua-table
我对访问Lua表中的数据有疑问。
说,有一个很大的Lua表,如下所示:
tbl = {
{
blockIdx = 5,
key1 = "val1",
key2 = "val2",
...
},
{
blockIdx = 30,
key1 = "val11",
key2 = "val12",
...
},
{
blockIdx = 83,
key1 = "val21",
key2 = "val22",
...
},
...
}
Run Code Online (Sandbox Code Playgroud)
现在,我想找到一个块,blockIdx例如38。
因此,通常情况下,我想使用for该块:
for k,v in pairs(tbl) do
if v.blockIdx == 38 then
blahFunction(v)
end
end
Run Code Online (Sandbox Code Playgroud)
但是我认为这不是一个好主意,特别是对于大桌子。
所以我对表做了一些修改:
tbl = {
[5] = {
key1 = "val1",
key2 = "val2",
...
},
[30] = {
key1 = "val11",
key2 = "val12",
...
},
[83] = {
key1 = "val21",
key2 = "val22",
...
},
...
}
Run Code Online (Sandbox Code Playgroud)
然后,我只需一行就可以轻松访问我的代码块:
blahFunction(tbl[38])
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,两种方法之间是否有性能差异?
也许tbl[38]实际上for在Lua内部做了一个循环?
或者就像C / C ++中的数组一样,我们可以使用[ ]不带for循环的方式直接访问内存,
显然,witch具有更好的性能。
性能不同,第二种方法效率更高。
在内部,Lua表包含一个数组部分和一个哈希部分,如果该表是一个序列,则序列部分由数组部分实现。但是第二个示例中的表不是序列,它可能是由哈希部分实现的。这种情况下的性能不像访问C / C ++中的数组,而是像访问哈希一样,这仍然非常快。
因此总而言之,第二段代码更快,因为它不会像第一个示例中那样遍历元素。