检查表格 Lua 中的项目
Checking for items in tables Lua
我有一个输入文件
Corn Fiber 17
Beans Protein 12
Milk Protien 15
Butter Fat 201
Eggs Fat 2
Bread Fiber 12
Eggs Cholesterol 4
Eggs Protein 8
Milk Fat 5
这是加载到 table。然后我可以使用 运行 命令来检查项目的值。例如>print(foods.Eggs.Fat)
2
我需要做的是能够搜索某个项目是否已经在 table 中。我有一个函数可以检查 table 是否有值,但它似乎不起作用。我的代码:
file = io.open("food.txt")
function has_value (tab, val)
for index, value in ipairs(tab) do
if value == val then
return true
else
return false
end
end
end
foods = {}
for line in file:lines()
do
local f, n, v = line:match("(%a+) (%a+) (%d+)")
if foods[f] then
foods[f][n] = v
else
foods[f] = {[n] = v}
end
end
file:close()
if has_value(foods, "Eggs") then
print("Yes")
else
print("No")
end
即使 table 确实包含该项目,我仍然从函数返回 false。在上面的示例中,即使我知道 Eggs 在 table 中,if has_value(names, "Eggs") then
也会打印 "No"。我的错误在哪里?
在这种情况下,您正在寻找 value
,而实际上您应该寻找 key
。
function has_key(table, key)
return table[key]~=nil
end
此函数应该可以满足您的需要,而且比搜索值快得多!
我有一个输入文件
Corn Fiber 17
Beans Protein 12
Milk Protien 15
Butter Fat 201
Eggs Fat 2
Bread Fiber 12
Eggs Cholesterol 4
Eggs Protein 8
Milk Fat 5
这是加载到 table。然后我可以使用 运行 命令来检查项目的值。例如>print(foods.Eggs.Fat)
2
我需要做的是能够搜索某个项目是否已经在 table 中。我有一个函数可以检查 table 是否有值,但它似乎不起作用。我的代码:
file = io.open("food.txt")
function has_value (tab, val)
for index, value in ipairs(tab) do
if value == val then
return true
else
return false
end
end
end
foods = {}
for line in file:lines()
do
local f, n, v = line:match("(%a+) (%a+) (%d+)")
if foods[f] then
foods[f][n] = v
else
foods[f] = {[n] = v}
end
end
file:close()
if has_value(foods, "Eggs") then
print("Yes")
else
print("No")
end
即使 table 确实包含该项目,我仍然从函数返回 false。在上面的示例中,即使我知道 Eggs 在 table 中,if has_value(names, "Eggs") then
也会打印 "No"。我的错误在哪里?
在这种情况下,您正在寻找 value
,而实际上您应该寻找 key
。
function has_key(table, key)
return table[key]~=nil
end
此函数应该可以满足您的需要,而且比搜索值快得多!