将带有字符串键的表格值插入到Lua表中。

我对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
...

等等…… 我希望使用键来确定哪些列表已经添加到表格中。 但问题在于,即使满足所有条件,也似乎没有任何列表添加到表格中。

我可以在 listOfLists 中使用 table.insert(list1) 来代替 listOfLists[key1] = list1,但这样我就无法告诉哪些列表已经添加到集合中了。 任何建议吗?

点赞
用户1601606
用户1601606

很难理解你想要实现什么。如果要得到更具体的答案,请提供更多信息。

你可以创建表中的表。

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或从代码中使用其他方法。

local tbl = { { key = "RC", value = {1, 2, 3, 4}} } -- 从 constructor 初始化第一个元素
table.insert(tbl, { key = "M", value = {4, 8, 7}}) --使用 table.insert 和构造函数
tbl[2] = {} -- 基于数组的访问。
tbl[2].key = "D" -- 使用键访问
tbl[2]["value"] = { 3, 8, 9 } -- 另一种方式

请注意,每个表由两个部分组成:从1到N的连续键的向量部分,以及映射其他的部分。某些函数,如表长运算符或ipairs迭代器,仅保证使用表的向量部分的工作。但它们执行得更快。

编辑:(最后一段的解释)

如果您有一个带有一些键的表,并要通过迭代来遍历,则可以使用ipairs或pairs。

ipairs是有序的,并从1到第一个非nil的元素。它不迭代非整数键。pairs遍历任何键,但不保证顺序。

local map = { 1, 2, 3, key = 6, [5] = 5 }
for i, v in ipairs(map) do
  print(v) --输出1,2,3。第一个nil元素是map [4]。map [5]将不被访问。
end

for i, v in pairs(map) do -- 注意使用pairs
  print(v) --将以任何顺序输出1,2,3,5,6
end

map [4] = 4 -- 填补空缺
for i, v in ipairs(map) do
   print(v) -- 输出1, 2, 3, 4, 5 。现在map[6]是第一个nil元素。
end

长度运算符类似于 ipairs,它不计算 ipairs 方法未访问的元素。

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,没有丢失任何内容
local num = 0
for _, __ in pairs(a) do num = num + 1 end
print(num) -- 1 找到了它。
2014-03-23 22:54:04
用户2226988
用户2226988

Lua表是一种灵活的数据结构。元素是键值对。键可以是除nil之外的任何Lua值。值可以是除nil之外的任何值。将nil赋给值会删除该键值对。

具有键值为number类型且从1到n为整数的子集(可能为空的)称为序列。n被确定为与nil值配对的最后一个这样的键。几个表函数和运算符仅适用于序列。

表构造函数允许使用以下几种语法来指定键:

  1. 通过序列隐含:{1, 2, 3}
  2. 显式键:{[1] = 1, [3] = 3, ["two"] = "value"}
  3. 标识符键:{one = 1, two = 2}

表构造函数可以使用它们的任意组合。

您定义了一个元素序列,每个元素都是一个具有两个元素的“表”,第二个元素是一个序列。

似乎您希望键为字符串,值为序列:

{
  RC = {1, 2, 3, 4},
  M = {4, 8, 7},
  D = {3, 8, 9}
}
2014-03-23 23:11:38