【问题标题】:Return a parameter of the same table返回同一张表的参数
【发布时间】:2016-07-11 11:11:39
【问题描述】:

假设是一张桌子:

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

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

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

【问题讨论】:

  • 您的问题,而不是您的表结构,意味着名称是唯一的。 @lhf 的 answer 基于此假设为表格提供了额外的结构。您可能会考虑使用该结构而不是您拥有的结构。 t = { ["Bob"] = { age = 34, ...}, ...}

标签: lua lua-table


【解决方案1】:

给定你的桌子,做一次

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

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

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

【讨论】:

  • 要做什么,打印表格如下:for name, record in pairs(t) do print(name); for attribute, value in pairs(record) do print("", attribute, value) end end
【解决方案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] 设置为值。

但是对于静态表来说,这很好。

【讨论】:

    猜你喜欢
    • 2020-01-24
    • 2013-05-16
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    相关资源
    最近更新 更多