Lua搜索表格

我正在使用Corona SDK开发一个游戏项目,遇到了一个问题。我尝试在for循环中使用string.find()来测试确定某个值是否在某个表中,如果是,将该值添加到另一个表中。我的问题是,由于在这种情况下string.find()/string.match不会读取重复项(假定for循环是原因),所以我只有"1102"、"1103",而没有"1102"、"1102"、"1103"、"1102" 在“copy”表中,这正是我试图做到的。有什么建议吗?

database =
{
 {name="test", serial="1102", img="src/1.png"},
 {name="test2", serial="1103", img="src/2.png"},
 {name="test3", serial="1104", img="src/3.png"}
}

list =
{
 "1102",
 "1102",
 "1103",
 "1102"
}

copy = {}
n=1

for i=1, #database do
 if string.find(database[i].serial, tostring(list[n])) then
   table.insert(copy, database[i].img)
   n=n+1
 end
end
for i=1, #copy do
    print(copy[i])
end
点赞
用户1009479
用户1009479

使用嵌套循环是有效的。

for lk, lv in ipairs(list) do
  for dk, dv in ipairs(database) do
    if string.find(dv.serial, tostring(lv)) then
      table.insert(copy, dv.img)
    end
  end
end

我正在使用ipairs,它与for i=1, #list do类似。

2015-06-04 07:57:13
用户4962485
用户4962485

数据库表中的序列号是独一无二的吗?如果是的话,从代码来看,我认为你可以让你的数据库表更加高效。

local database =
{
 [1102] = {name="test", img="src/1.png"},
 [1103] = {name="test2", img="src/2.png"},
 [1104] = {name="test3", img="src/3.png"}
}

请注意,进行此更改后,您将无法使用迭代器遍历数据库表。但是,您检查部分的代码如下:

local list = {1102,1102,1103,1102,}
local copy = {};
for index, serial in next, list do
    if database[serial] then copy[#copy+1] = database[serial].img end
end

至于最后一部分,您可以使用 table.concat() 将表的值作为字符串打印出来,而不必一个一个地迭代:

table.concat(copy, "\n")

最后,我知道你上面写的代码只是一个例子,但是对于全局变量要小心;我希望它们(database、list、copy)在您的代码中不是全局的。无论如何,

此致,礼眼!

lyr

2015-06-04 11:28:39