Return同一个参数table

Return a parameter of the same table

假设 table:

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

以姓名为索引,如何return打印Bob的年龄或Barbara的性别?

更准确地说,当姓名为 "Bob" 或任何其他时,调用年龄和性别的函数。

考虑到你的table,做一次

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

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

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

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

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] 的条目。

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

但对于静态 table,这样就可以了。