如何在 Lua 中获取数组的大小

我试图获取一个数组的大小并且在其中进行循环。我尝试使用 getn 函数,但它没有起作用。 以下是我的代码:

results =
  {
    address= "地址 1",
    type_address= "居住地",
    phone= "654620460",
    email= "邮箱1@email.com"
  },
  {
    address= "地址 2",
    type_address= "商业地",
    phone= "604654650",
    email= "邮箱2@email.com"
  }

for i = 0, table.getn(results), 1 do
   if results[i].type_address == "居住地" then
            phone = results[i].phone
            email = results[i].email

            break
        else
            phone = results[1].phone
            email = results[1].email
        end
end

print (phone)
print (email)
点赞
用户8621712
用户8621712

使用 #tbl 获取表格的大小。

你忘记将项目包装到 {} 中。现在你将 results 分配给了具有 Address 1 的表格,由于你没有将它分配给任何东西(由于错误),因此忽略了具有 Address 2 的表格。

像这样包装它:

results = {
    -- 在此处添加项目
}

快速提醒:table.getn 已经弃用,与 #tbl 完全相同,你还可以使用 for k,v in ipairs(results) dofor 语句的第三个参数是可选的,默认为 1

for i = 0, #results do
    if results[i].type_address == "RESIDENCIAL" then
    -- 等等
end

-- 或者
for k, v in ipairs(results) do
    if v.type_address == "RESIDENCIAL" then
    -- 等等
end
2020-11-16 14:45:44
用户11740758
用户11740758

我使用以下代码作为元方法__index.len,用于对键进行计数:

function(len) 
    local incr=0 
    for _ in pairs(len) do 
        incr=incr+1 
    end 
    return incr 
end

然后,它可以正确计算混合数字和命名键的数量:

> test_table={'1',two='2',pi=math.pi,popen=io.popen}
> setmetatable(test_table,{__index={len=function(len) local incr=0 for _ in pairs(len) do incr=incr+1 end return incr end}})
table: 0x565aa850
> test_table:len()
4

但是,它与#test_table不同,后者计算不了命名键的数量:

> #test_table
1
2020-11-16 15:10:57