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

Sorting 在lua中实现表以访问特定的部分以供以后使用,sorting,lua,Sorting,Lua,我想做一个表存储3个部分,每个都是巨大的长度。第一个是名称,第二个是EID,第三个是SID。我希望能够得到这样的信息:名字[1]给了我名字列表中的第一个名字,另外两个也一样。我在如何做到这一点上遇到了问题,因为似乎每个人都有自己的方式,彼此都非常不同。现在这就是我所拥有的 info = { {name = "btest", EID = "19867", SID = "664"}, {name = "btest1", EID = "19867", SID = "664

我想做一个表存储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]吗?或者,我如何安排表格,以便可以单独访问每个部分

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

水平分区(面向对象) 将每行数据存储在表中。所有表必须具有相同的字段

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

这与您的示例完全相同:

垂直分区(面向阵列) 将每个属性存储在表中。所有表格的长度必须相同

优势:总体上减少了表,并且稍微节省了时间和空间(LuaVM使用实际阵列)。 缺点:需要两个对象来引用一行:表和索引。插入/删除比较困难

您的示例如下所示:

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

print(info.names[2]) -- access second name
那么我应该选择哪一个呢? 除非您真的需要性能,否则您应该使用水平分区。在整行上工作要常见得多,并且在如何使用结构方面给了您更多的自由。如果您决定使用完整的OO,那么以水平形式保存数据会容易得多


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

|名称| EID | SID |名称|
--+-------+-----+-----+         +-------+       
1 |       |     |     |         |       |       --+-------+-----+-----+
2 |       |     |     |         |       |       2 |       |     |     |
3 |       |     |     |         |       |       --+-------+-----+-----+

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

将是
info[1]。name
info[2]。name
等等
info = {
    names = { "btest", "btest1", "btest2", "btest3", },
    EID   = { "19867", "19867",  "19867",  "19867",  },
    SID   = { "664",   "664",    "664",    "664",    },
}

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