所以我需要根据许多标签搜索表格。
需要根据标签数量创建匹配列表。 因此,如果我们匹配4个标签作为列表,则3个标记另一个列表,另外2个标记。
你将如何用lua表实现这个?
我不想要太复杂的东西,如果有一个库或一个数据库的设置并不复杂,那就好了。
但如果不是,我可以以速度和记忆为代价接受本机解决方案。
我的意思是标签是
让我们说我们有桌子
T [1] = {猫,鼠标蝙蝠,苍蝇,汽车,飞机,滑翔机}
其中一些术语,如蝙蝠,飞行,飞机,滑翔机,都会有一个标签可以飞行。
另一个标签可能是汽车和飞机的机器。
另一个标签是动物:猫,老鼠,蝙蝠,苍蝇
因此,如果您使用两个标签flyable + machine搜索,您将获得airpalne 如果你搜索动物+飞行你会得到蝙蝠和飞行。
所以我需要的是一个包含这个标签信息的结构,让我可以轻松搜索。
答案 0 :(得分:1)
集可能是您要查找的数据结构的类型。请按照Programming in Lua一书中的说明查看“设置”。
答案 1 :(得分:1)
function findtable(table,value)
for k,v in pairs(table) do
if (v == value) or (k == value) then
return true
end
end
return false
end
function tagged_flyable(value)
local flyable_table = {'bat','fly','airplane','glider'}
if(findtable(flyable_table,value) == true) then
return true
else
return false
end
end
function tagged_animals(value)
local animals_table = {'cat','mouse','bat','fly'}
if(findtable(animals_table,value) == true) then
return true
else
return false
end
end
function tagged_machines(value)
local machines_table = {'car', 'airplane'}
if(findtable(machines_table,value) == true) then
return true
else
return false
end
end
-- main process
local T_1 = {'cat','mouse', 'bat', 'fly', 'car', 'airplane', 'glider'}
local search_results = {}
-- search for tag: flyable+machine
for i=1,table.getn(T_1) do
if(tagged_machines(T_1[i]) and tagged_flyable(T_1[i])) then
table.insert(search_results, T_1[i])
print("found :", T_1[i])
end
end
-- search for tag: flyable+animals
search_results = {}
for i=1,table.getn(T_1) do
if(tagged_animals(T_1[i]) and tagged_flyable(T_1[i])) then
table.insert(search_results, T_1[i])
print("found :", T_1[i])
end
end
答案 2 :(得分:1)
最简单的是一个标签表,加上两个结果表。标签表:
T = {cat={"animal", "legs"}, bat={"animal", "wings"}, ...}
结果表只是常规表,其中的对象具有某个标记:
res1 = get(T, "wings")
print(res1) -- prints cat bat plane
res2 = get(T, "machine")
print(res2) -- prints car train plane
然后找到两个结果的交集的函数:
bothTags = getIntersection(res1,res2)
getIntersection()只需循环遍历第一个表res1并测试res2 [itemFromFirstTable]是否为nil,如果没有则则表示两个表中都有一个项目。