Lua 搜索 table
Lua search through table
我正在使用 Corona SDK 开发一个游戏项目,但我 运行 遇到了问题。我正在尝试在 for 循环中使用 string.find() 来测试以确定某个值是否在某个 table 中,如果是,则将该值添加到另一个 table 中。我的问题是,由于 string.find()/string.match 在这种情况下不读取重复项(假设 for 循环是原因)。我基本上只有 "copy" table 中的“1102”、“1103”而不是“1102”、“1102”、“1103”、“1102”,这就是我想要得到的这个要做。有什么建议吗?
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
,它类似于 for i=1, #list do
。
数据库中的连续出版物table是否唯一?如果是这样,从代码来看,我认为你可以让你的数据库 table 更有效率。
local database =
{
[1102] = {name="test", img="src/1.png"},
[1103] = {name="test2", img="src/2.png"},
[1104] = {name="test3", img="src/3.png"}
}
请注意,通过此更改,您不能使用迭代 for 循环在数据库中导航 table。但是,您进行检查的部分变成了:
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 的值打印为字符串,而不是一个一个地迭代它:
table.concat(copy, "\n")
最后,我知道你写的代码有一个例子,但要小心全局变量;我希望它们(数据库、列表、副本)在您的代码中不是全局的。总之,
问候,lyr
我正在使用 Corona SDK 开发一个游戏项目,但我 运行 遇到了问题。我正在尝试在 for 循环中使用 string.find() 来测试以确定某个值是否在某个 table 中,如果是,则将该值添加到另一个 table 中。我的问题是,由于 string.find()/string.match 在这种情况下不读取重复项(假设 for 循环是原因)。我基本上只有 "copy" table 中的“1102”、“1103”而不是“1102”、“1102”、“1103”、“1102”,这就是我想要得到的这个要做。有什么建议吗?
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
,它类似于 for i=1, #list do
。
数据库中的连续出版物table是否唯一?如果是这样,从代码来看,我认为你可以让你的数据库 table 更有效率。
local database =
{
[1102] = {name="test", img="src/1.png"},
[1103] = {name="test2", img="src/2.png"},
[1104] = {name="test3", img="src/3.png"}
}
请注意,通过此更改,您不能使用迭代 for 循环在数据库中导航 table。但是,您进行检查的部分变成了:
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 的值打印为字符串,而不是一个一个地迭代它:
table.concat(copy, "\n")
最后,我知道你写的代码有一个例子,但要小心全局变量;我希望它们(数据库、列表、副本)在您的代码中不是全局的。总之,
问候,lyr