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

时间:2014-06-10 15:03:23

标签: sorting lua

我正在尝试制作一个桌面存储3个部分,每个部分的长度都很大。第一个是名称,第二个是EID,第三个是SID。我想能够得到像这个名字[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]吗?或者我怎样才能安排桌子,以便我可以单独访问每个部分?

2 个答案:

答案 0 :(得分:2)

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

水平分区(面向对象)

  

将每行数据存储在一个表中。所有表格必须具有相同的字段。

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

这看起来与您的示例完全相同:

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

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

垂直分区(面向阵列)

  

将每个属性存储在表中。所有表格的长度必须相同。

优势:整体表格更少,略微更多时间和空间效率(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

那么我应该选择哪一个?

除非您确实需要性能,否则您应该使用水平分区。在整行上工作更为常见,让您在使用结构方面拥有更多自由。如果您决定使用完整的OO,那么以横向形式提供数据会更容易。


附录

姓名"水平"和"垂直"来自关系数据库的表格表示。

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

答案 1 :(得分:0)

您的info表是一个数组,因此您可以使用info[N]访问项目,其中N是从1到表中项目数的任意数字。 info表的每个字段本身就是一个表。 info的第二项是info[2],因此该项的name字段为info[2].name