gpt4 book ai didi

sorting - 在 lua 中实现表以访问特定部分供以后使用

转载 作者:行者123 更新时间:2023-12-04 22:00:30 27 4
gpt4 key购买 nike

我正在尝试制作一个表来存储 3 个部分,每个部分的长度都很大。第一个是名称,第二个是 EID,第三个是 SID。我希望能够获得这样的信息 name[1] 为我提供了名称列表中的第一个名称,其他两个也是如此。我遇到了如何执行此操作的问题,因为似乎每个人都有自己的方式,这些方式彼此之间非常不同。现在这就是我所拥有的。

info = {
{name = "btest", EID = "19867", SID = "664"},
{name = "btest1", EID = "19867", SID = "664"},
{name = "btest2", EID = "19867", SID = "664"},
{name = "btest3", EID = "19867", SID = "664"},
}

从理论上讲,我可以只说 info.name[1] 吗?或者我还能如何安排表格以便我可以分别访问每个部分?

最佳答案

存储数据有两种主要“方式”:

横向划分(面向对象)

Store each row of the data in a table. All tables must have the same fields.

优点:每个表都包含相关数据,因此更容易传递它(例如,f(info[5]))。缺点:要为每个元素创建一个表,增加了一些开销。

这看起来和你的例子一模一样:

info = {
{name = "btest", EID = "19867", SID = "664"},
-- etc ...
}

print(info[2].names) -- access second name

垂直分区(面向数组)

Store each property in a table. All tables must have the same length.

优点:总体表较少,稍微时间和空间效率更高(Lua VM 使用实际数组)。缺点:需要两个对象来引用一行:表和索引。插入/删除更难。

你的例子看起来像这样:

info = {
names = { "btest", "btest1", "btest2", "btest3", },
EID = { "19867", "19867", "19867", "19867", },
SID = { "664", "664", "664", "664", },
}

print(info.names[2]) -- access second name

那么我应该选择哪一个呢?

除非你真的需要性能,否则你应该使用水平分区。在整行上工作更为常见,并且让您可以更自由地使用结构。如果您决定完全面向对象,那么以水平形式处理数据会容易得多。


附录

名称“水平”和“垂直”来自关系数据库的表表示。

  | names | EID | SID |         | names |
--+-------+-----+-----+ +-------+
1 | | | | | | --+-------+-----+-----+
2 | | | | | | 2 | | | |
3 | | | | | | --+-------+-----+-----+

关于sorting - 在 lua 中实现表以访问特定部分供以后使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24144392/

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