gpt4 book ai didi

performance - Lua表访问效率

转载 作者:行者123 更新时间:2023-12-04 19:06:22 26 4
gpt4 key购买 nike

我有一个关于访问 Lua 表中数据的问题。
比如说,有一个像下面这样的大 Lua 表:

 tbl = {
{
blockIdx = 5,
key1 = "val1",
key2 = "val2",
...
},
{
blockIdx = 30,
key1 = "val11",
key2 = "val12",
...
},
{
blockIdx = 83,
key1 = "val21",
key2 = "val22",
...
},
...
}

现在我想找到 blockIdx 的块之一例如,是 38 .
所以通常,我想使用 for找到块:
for k,v in pairs(tbl) do
if v.blockIdx == 38 then
blahFunction(v)
end
end

但我认为这不是一个好主意,尤其是对于大 table 。
所以我稍微修改了一下表格:
 tbl = {
[5] = {
key1 = "val1",
key2 = "val2",
...
},
[30] = {
key1 = "val11",
key2 = "val12",
...
},
[83] = {
key1 = "val21",
key2 = "val22",
...
},
...
}

然后我可以用一行轻松访问我的块:
blahFunction(tbl[38])

所以我的问题是,两种方法之间有什么性能不同吗?
也许在做 tbl[38]实际上做了一个 for在 Lua 中循环?
或者就像 C/C++ 中的数组一样,我们可以使用 [ ] 直接访问内存没有 for环形,
女巫显然有更好的表现。

最佳答案

性能不同,第二种方法效率更高。

Lua 表内部包含数组部分和哈希部分,如果表是序列,则序列部分由数组部分实现。但是你第二个例子中的表不是一个序列,它可能是由散列部分实现的。这种情况下的性能不像在 C/C++ 中访问数组,而是像访问散列,这仍然相当快。

所以总而言之,第二段代码更快,因为它不像第一个示例中那样遍历元素。

关于performance - Lua表访问效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23258553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com