如何在 lua 中初始化 table 大小
How to initialize table size in lua
将数字转换为 table 的最有效方法是什么?或者是否可以制作一个 table 没有循环 ?
local t = 10 -- given number
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} -- result
更新:t
变量是 mutable 个数字,我想为每个值计算值。
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)
的最快方法。或者没有任何意义?
最简单的方法是定义一个函数:
function newArray(size)
local t = {}
for i = 1, size do
t[i] = i
end
return t
end
也许你不知道如何回答@Sebastian 的问题。这里有一些可供您思考的备选方案。
由于您的 table 只有计算元素,您可以省略存储并只对每次读取访问(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])
当然,您也可以将 table 替换为 returns 值的恒等函数,甚至只是恒等式表达式。但是,也许您对 table 有未表达的要求,或者您需要 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
将数字转换为 table 的最有效方法是什么?或者是否可以制作一个 table 没有循环 ?
local t = 10 -- given number
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} -- result
更新:t
变量是 mutable 个数字,我想为每个值计算值。
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)
的最快方法。或者没有任何意义?
最简单的方法是定义一个函数:
function newArray(size)
local t = {}
for i = 1, size do
t[i] = i
end
return t
end
也许你不知道如何回答@Sebastian 的问题。这里有一些可供您思考的备选方案。
由于您的 table 只有计算元素,您可以省略存储并只对每次读取访问(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])
当然,您也可以将 table 替换为 returns 值的恒等函数,甚至只是恒等式表达式。但是,也许您对 table 有未表达的要求,或者您需要 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