返回同一个表

时间:2016-07-10 10:22:22

标签: lua lua-table

让我们说一张桌子:

t = {
    { name = "Bob", age = 34, gender = "Male"},
    { name = "Bill", age = 40, gender = "Male"},
    { name = "Barbara", age = 20, gender = "Female"}
}

使用name作为索引,我需要做什么才能返回或打印Bob的年龄或Barbara的性别?

更确切地说,当名称为“Bob”或其他任何名称时,调用年龄和性别的函数。

2 个答案:

答案 0 :(得分:3)

根据您的表格,执行此操作

for i=1,#t do
        t[t[i].name]=t[i]
end

然后您可以使用名称访问字段:

print(t["Bob"].age, t["Bob"].gender)

答案 1 :(得分:2)

有几种方法可以解决这个问题。显而易见的方法是遍历表中的所有元素,直到找到正确的元素:

function FindByName(name)
    for i = 1, #t do
        if(t[i].name == name) then return t[i] end
    end
    assert(false, "Could not find name " .. name)
end

因此,您可以致电FindByName("Bob").gender来获取该特定字段。

但是,如果您知道要按名称查找,那么您可以修改数组以使名称具有相同的键。构建数组后,调用此函数:

function MapToName(t)
    for i = 1, #t do
        t[t[i].name] = t[i]
    end
end

这样您就可以使用t[the_name]查看输入内容。

这种方法的缺点是,每次添加元素,删除元素或更改元素名称时,都需要相应地修改表格。如果您更改了元素的名称,则必须将t[old_name]设置为nil,并将t[new_name]设置为该值。

但对于静态表,这没关系。