【问题标题】:How to get the size of an array in lua如何在lua中获取数组的大小
【发布时间】:2020-11-16 14:38:11
【问题描述】:

我正在尝试获取数组的大小并在其中循环。我尝试使用getn 函数,但它不起作用。 这是我的代码:

results = 
  {
    address= "Address 1",
    type_address= "RESIDENCIAL",
    phone= "654620460",
    email= "email1@email.com"
  },
  {
    address= "Address 2",
    type_address= "COMERCIAL",
    phone= "604654650",
    email= "email1@email.com"
  }

for i = 0, table.getn(results), 1 do
   if results[i].type_address == "RESIDENCIAL" 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)

【问题讨论】:

    标签: lua


    【解决方案1】:

    要获取表的大小,请使用#tbl 表示数组。

    您忘记将项目包装到 {}。现在您将results 分配给带有Address 1 的表,带有Address 2 的表将被忽略,因为您没有将它分配给任何东西(由于错误)

    这样包装:

    results = {
        -- items here
    }
    

    快速说明:table.getn 已弃用,与#tbl 相同,您也可以使用 for k,v in ipairs(results) dofor 语句的第三个参数是可选的,默认为1

    for i = 0, #results do
        if results[i].type_address == "RESIDENCIAL" then
        -- etc
    end
    
    -- or
    for k, v in ipairs(results) do
        if v.type_address == "RESIDENCIAL" then
        -- etc
    end
    

    【讨论】:

    • Lua 表从 1 开始。所以第一个循环是 for i = 1, #results do
    【解决方案2】:

    我用...

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

    ...作为表键计数的元方法__index.len。那么……

    > 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
    1
    

    ...没有。

    【讨论】:

    • 这对非顺序表和非数组很有用
    • 完全正确 - 调用 lua -i 时查看 arg 表 - 该表以 0 开头,上面的代码计算正确。我第一次想知道 Lua 中的序列不是从零开始的。但实际上,表不仅仅是一个数组。因为它几乎可以保存(除了 nil/empty )所有内容作为值的键。
    猜你喜欢
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    • 2017-01-18
    • 2010-09-12
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多