如何在 Lua 中初始化表大小

最有效的方法是将数字转换为表吗?还是可以在不使用循环的情况下创建表?

local t = 10 -- 给定的数字
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} -- 结果

更新:t 变量是可变数字,我想遍历每个值。

t = 3

function foreach(f, t)
  for i, v in ipairs(t) do
    f(v)
  end
end

foreach(print, t)
1
2
3

我需要在 Lua 中快速创建 new Array(n),是否有任何意义?

点赞
用户573255
用户573255

最简单的方法是定义一个函数:

function newArray(size)
    local t = {}
    for i = 1, size do
        t[i] = i
    end
    return t
end
2016-02-28 12:47:52
用户2226988
用户2226988

也许您不知道如何回答 @Sebastian 的问题。以下是一些替代方案,可帮助您思考。

由于您的表仅具有计算元素,因此可以省略存储,并在每次读取访问(index)时执行计算。

local function newArray(size)
    local t = {}
    setmetatable(t, {
           __index = function (_, i)
               return i >= 1 and i <= size and i or nil end})
    return t
end

t10 = newArray(10)
for i = 0, 11 do -- ipairs won't work as expected with such a table
    print(i, t10[i])
end
t10[2] = "stored values override __index"
print(t10[2])

当然,您也可以将表替换为仅返回值的身份函数,甚至只是身份表达式。但是,也许您对表有未表达的要求,或者需要使用 ipairs 迭代序列。

说到迭代器,

local function seq_itor(first, last)
    local i = first - 1
    return function ()
        i = i + 1
        if i <= last then return i end
    end
end

for i in seq_itor(1, 10) do
    print(i)
end
2016-02-28 16:58:19