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,这样就可以了。
假设 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,这样就可以了。