我对Lua语言比较陌生,而且我对表格结构显然缺少了一些东西。
我试图创建一个表表,表中的每个表都有一个键,值是相应的表。
好的,这句话可能令人困惑。这是一个例子:
{{ key = "RC", value = {1, 2, 3, 4}},
{ key = "M", value = {4, 8, 7}},
{ key = "D", value = {3, 8, 9}}
...}
为此我使用了以下算法:
local listOfLists = {};
...
if condition1 then
listOfLists[key1] = list1;
end
...
if condition2 then
listOfLists[key2] = list2;
end
...
等等......
我希望稍后使用这些键来确定哪些列表已添加到表中。 但问题是,即使满足所有条件,似乎也没有列表添加到列表中。
我可以使用table.insert(listOfLists, list1)
代替listOfLists[key1] = list1
,但后来我无法确定哪些列表已添加到集合中。
蚂蚁建议?
答案 0 :(得分:3)
很难理解,你想达到什么目标。因此,如果您想要更具体的答案,请提供更多信息。
您可以创建表的关联表。
local map = {}
map["key"] = { 1, 2, 3, 4 }
print(map.key[3])
或者你可以创建一个表数组
local vector = {}
vector[1] = { 1, 2, 3, 4 }
print(vector[1][2])
或者你可以结合使用方法。
创建
{{ key = "RC", value = {1, 2, 3, 4}},
{ key = "M", value = {4, 8, 7}},
{ key = "D", value = {3, 8, 9}}
...}
您可以使用代码中的table constructor或smth。
local tbl = { { key = "RC", value = {1, 2, 3, 4}} } -- init first elem from constructor
table.insert(tbl, { key = "M", value = {4, 8, 7}}) -- table insert & constructor
tbl[2] = {} -- Array-based access.
tbl[2].key = "D" --key access
tbl[2]["value"] = { 3, 8, 9 } -- other way
注意,每个表由两部分组成:用于从1到N的序列键的向量,否则用映射。某些函数(如表长度运算符或ipairs迭代器)保证仅适用于表的向量部分。但它们明显更快。
编辑:(最后一段解释)
如果你有一个带有一些键的表并希望迭代,你可以使用ipairs或pair。
ipairs
是有序的,从1到第一个非零元素。它不会迭代非整数键。 pairs
通过任何密钥,但不保证顺序。
local map = { 1, 2, 3, key = 6, [5] = 5 }
for i, v in ipairs(map) do
print(v) -- will output 1, 2, 3. first nil element is map[4]. map[5] will mot be visited.
end
for i, v in pairs(map) do -- NOTE pairs usage
print(v) -- will output 1, 2, 3, 5, 6 in ANY order
end
map[4] = 4 -- Fill gap
for i, v in ipairs(map) do
print(v) -- will output 1, 2, 3, 4, 5. Now first nil element is map[6]
end
长度运算符的工作方式类似于ipairs
,它不计算ipairs
方法未访问过的元素。
table.maxn适用于数字索引,并且会为您的表返回零。
参考说明table.maxn
返回给定表的最大正数字索引,如果表没有正数字索引则返回零。 (为了完成它的工作,这个函数对整个表进行线性遍历。)
关于长度和table.maxn
的小例子local a = { 1, 2, 3, [5] = 5}
print(table.maxn(a)) -- 5
print(#a) -- 3
a = { key = 4 }
print(table.maxn(a)) -- 0
print(#a) -- 0
print(a["key"]) -- 4, nothing is lost
local num = 0
for _, __ in pairs(a) do num = num + 1 end
print(num) -- 1 We find it.
答案 1 :(得分:2)
Lua表是一种灵活的数据结构。元素是键值对。密钥是除nil
之外的任何Lua值。除nil
之外,值可以包含任何值。为值分配nil
将删除该对。
具有number
类型的键值的表的(可能为空)子集是从1到n的整数,称为序列。 n被确定为与nil
值配对的最后一个这样的密钥。几个表函数和运算符仅适用于序列。
表构造函数允许键的几种语法:
{1, 2, 3}
{[1] = 1, [3] = 3, ["two"] = "value"}
{one = 1, two = 2}
表构造函数可以使用它们的任意组合。
您已经定义了一系列元素,每个元素都是一个包含两个元素的表格 第二个是序列。
看起来你希望键是字符串,值是序列:
{
RC = {1, 2, 3, 4},
M = {4, 8, 7},
D = {3, 8, 9}
}