【问题标题】:Checking for items in tables Lua检查 Lua 表中的项目
【发布时间】:2017-03-30 03:23:57
【问题描述】:

我有一个输入文件

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

这被加载到一个表中。然后我可以运行命令来检查项目的值。例如>print(foods.Eggs.Fat) 2

我需要做的是能够搜索一个项目是否已经在表格中。我有一个检查表是否有值的函数,但它似乎不起作用。我的代码:

  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

即使表格确实包含该项目,我仍然会从函数返回错误。在上面的示例中,if has_value(names, "Eggs") then 正在打印“否”,即使我知道 Eggs 在表中。我的错误在哪里?

【问题讨论】:

    标签: lua lua-table


    【解决方案1】:

    在这种情况下,您正在寻找value,而实际上您应该寻找key

    function has_key(table, key)
        return table[key]~=nil
    end
    

    这个函数应该做你需要做的事情,而且比搜索值要快得多!

    【讨论】:

    • 我想你的意思是nil,而不是null,即使如果你没有定义null,这个错字也有同样的效果......
    • 你是对的,好地方。我最近写 Java 太多了。
    猜你喜欢
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 2016-11-25
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多