Lua中是否有声明可以让我确定它是否是最后一个循环周期? 当我无法确定循环次数会循环多少时?
示例:
for _, v in pairs(t) do
if I_know_this_is_your_last_cycle then
-- do something
end
答案 0 :(得分:5)
这是missingno答案的简化版本:--)
for _, v in pairs(t) do
if next(t,_) == nil then
-- do something in last cycle
end
end
答案 1 :(得分:1)
一般来说,没有。从Lua docs可以看出,for循环是迭代器顶部的while循环的语法糖,因此它只知道循环开始时循环是否结束。
如果你真的想检查一下你是否进入了最后一次迭代,那么我只需要用while循环显式编码。
local curr_val = initial_value
while curr_val ~= nil then
local next_val = get_next(initial_value)
if next_val ~= nil then
--last iteration
else
--not last iteration
end
curr_val = next_val
end
如果要使用pairs
函数翻译示例,可以使用next函数作为迭代器。
顺便说一句,我建议在编写像这样的循环之前再思考两次。它编码的方式意味着它非常容易编写代码,当你迭代0或1个元素或编写不能正确处理最后一个元素的代码时,这些代码不能正常工作。大多数时候编写一个简单的循环并在循环后放置“末尾”代码更合理。
答案 2 :(得分:1)
你可能会尝试写这样的东西:
--count how many elements you have in the table
local element_cnt = 0
for k,v in pairs(t) do
element_cnt = element_cnt + 1
end
local current_item = 1
for k,v in pairs(t)
if current_item == element_count then
print "this is the last element"
end
current_item = current_item + 1
end
或者这个:
local last_key = nil
for k,v in pairs(t) do
last_key = k
end
for k,v in pairs(t) do
if k == last_key then
--this is the last element
end
end
答案 3 :(得分:0)
有几种方法可以做到这一点。最简单的方法是使用标准for循环并自行检查,如下所示:
local t = {5, nil, 'asdf', {'a'}, nil, 99}
for i=1, #t do
if i == #t then
-- this is the last item.
end
end
或者,您可以为表格滚动自己的迭代器函数,告诉您何时使用最后一项,如下所示:
function notifyPairs(t)
local lastItem = false
local i = 0
return
function()
i = i + 1
if i == #t then lastItem = true end;
if (i <= #t) then
return lastItem, t[i]
end
end
end
for IsLastItem, value in notifyPairs(t) do
if IsLastItem then
-- do something with the last item
end
end