lua中,数组子元素
Posted
技术标签:
【中文标题】lua中,数组子元素【英文标题】:In lua, array sub element 【发布时间】:2017-02-09 16:25:56 【问题描述】:在 Lua 中, 我想选择数组的部分。 下面的例子从第二个元素中选择
a = 1, 2, 3
print(a)
b =
for i = 2, table.getn(a) do
table.insert(b, a[i])
end
print(b)
在 python 中 a[1:] 有效。 Lua有类似的语法吗?
【问题讨论】:
请不要使用table.getn(t)
,这是不好的做法,请使用#t
【参考方案1】:
Lua 没有类似的语法。但是,您可以定义自己的函数来轻松包装此逻辑。
local function slice (tbl, s, e)
local pos, new = 1,
for i = s, e do
new[pos] = tbl[i]
pos = pos + 1
end
return new
end
local foo = 1, 2, 3, 4, 5
local bar = slice(foo, 2, 4)
for index, value in ipairs(bar) do
print (index, value)
end
请注意,这是foo
到bar
中元素的浅 副本。
或者,在 Lua 5.2 中,您可以使用 table.pack
和 table.unpack
。
local foo = 1, 2, 3, 4, 5
local bar = table.pack(table.unpack(foo, 2, 4))
虽然说明书上是这么说的:
table.pack (···)
返回一个新表,其中所有参数都存储在键 1、2 等中,并带有一个包含参数总数的字段“n”。请注意,结果表可能不是序列。
虽然 Lua 5.3 有 table.move
:
local foo = 1, 2, 3, 4, 5
local bar = table.move(foo, 2, 4, 1, )
最后,大多数人可能会选择在此之上定义某种 OOP 抽象。
local list =
list.__index = list
function list.new (o)
return setmetatable(o or , list)
end
function list:append (v)
self[#self + 1] = v
end
function list:slice (i, j)
local ls = list.new()
for i = i or 1, j or #self do
ls:append(self[i])
end
return ls
end
local foo = list.new 1, 2, 3, 4, 5
local bar = foo:slice(2, 4)
【讨论】:
以上是关于lua中,数组子元素的主要内容,如果未能解决你的问题,请参考以下文章
2022-10-27:设计一个数据结构,有效地找到给定子数组的 多数元素 。 子数组的 多数元素 是在子数组中出现 threshold 次数或次数以上的元素。 实现 MajorityChecker 类