在Lua中向表中添加其他值

时间:2017-03-29 03:49:13

标签: multidimensional-array lua lua-table

我有一个包含不同食物类型的输入文件

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

(不要太认真地对待这些。我不是营养专家)无论如何,我有以下脚本读取输入文件,然后将以下内容放入表中

    file = io.open("food.txt")
foods = {}
nutritions = {}
for line in file:lines() 
    do
        local f, n, v = line:match("(%a+) (%a+) (%d+)")
        nutritions[n] = {value = v}
        --foods[f] = {} Not sure how to implement here
    end
file:close()

(现在有点乱) 另请注意,不同的食物可以有不同的营养素。例如,鸡蛋同时含有蛋白质和脂肪。我需要一种方法来让程序知道我想要调用哪个值。例如:

> print(foods.Eggs.Fat)
2
> print(foods.Eggs.Protein
8

我相信我需要两张桌子,如上图所示。食物表将包含营养表。通过这种方式,我可以拥有多种具有多种不同营养成分的食物类型。但是,我不知道如何处理表格表。我怎样才能在我的程序中实现这个?

1 个答案:

答案 0 :(得分:2)

直接的方法是测试food[f]是否存在,以决定是创建新表还是向现有表添加元素。

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