Lua表搜索

Lua表搜索,lua,coronasdk,lua-table,Lua,Coronasdk,Lua Table,我正在使用Corona SDK进行一个游戏项目,我遇到了一个问题。我试图在for循环中使用string.find()进行测试,以确定某个值是否在某个表中,如果是,则将该值添加到另一个表中。我的问题是,在这种情况下,因为string.find()/string.match不会读取重复项(假设for循环是原因)。我基本上只有“1102”,“1103”而不是“1102”,“1102”,“1103”,“1102”,在“copy”表中,这就是我试图做到这一点的方式。有什么建议吗 database = {

我正在使用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

使用嵌套循环是可行的

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
,这类似于I=1的
,#list do

数据库表中的序列是唯一的吗?如果是这样的话,从代码来看,我认为您可以使数据库表更加高效

local database = 
{
 [1102] = {name="test", img="src/1.png"},
 [1103] = {name="test2", img="src/2.png"},
 [1104] = {name="test3", img="src/3.png"}
}
请注意,通过此更改,您不能使用迭代for循环在数据库表中导航。但是,您进行检查的部分变成:

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")
最后,我知道你写的代码有一个例子,但是要注意全局变量;我希望它们(数据库、列表、副本)在代码中不是全局的。反正


关于,lyr

tostring(列表[n])
中什么是
n
?如果
数据库中的某个值的
序列
列表中的任何一个或某个特定值匹配,则要匹配该值?
列表
中的重复元素意味着什么?意味着添加n=1,因此每个查找都是n=n+1,以转到下一个索引。基本上,我要做的是将“列表”中的序列号与“数据库”匹配,每次匹配时,将img值添加到“复制”表中。最重要的是,我需要它这样做,即使是重复像3“1102”系列,在'列表'中出现的顺序。然后使用复制表绘制图像,甚至复制图像。我想不出来。我正在考虑一个for循环,但我不确定如何进行。对于您的示例输入,您希望
copy
有一个
“src/1.png”
和一个
“src/2.png”
,这是正确的吗?代码的读取方式是:src/1.png,src/2.png。但是,它需要读取为
src/1.png
src/1.png,
src/3.png
src/1.png
遵循“列表”的设置方式。我一直在研究如何以这种方式遍历表,直到
list
将其所有
img
放入
copy
中,然后您可以使用这些序列作为数据库表中的键;如上图所示。