Lua循环:知道循环何时结束。

在 Lua 中有没有一个语句可以让我确定这是最后一个循环周期? 当我无法确定循环将循环多少次时?

例如:

for _, v in pairs(t) do
if 我知道这是你的最后一个周期 then
-- 做某事
end
点赞
用户90511
用户90511

通常不可以。你可以从Lua文档看到,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
       --最后一次迭代
    else
       --不是最后一次迭代
    end
    curr_val = next_val
end

如果你想使用pairs函数进行示例翻译,可以使用next函数作为迭代器。


另外,我建议在编写这样的循环之前要三思。它的编码方式意味着在迭代0或1个元素时很容易编写不正确的代码,或者编写不正确处理最后一个元素的代码。大多数情况下,编写一个简单的循环并将“最后”代码放在循环后面更合理一些。

2013-04-04 18:34:06
用户1208078
用户1208078

有几种方法可以做到这一点。最简单的方法是只使用标准的 for 循环并自己检查,就像这样:

local t = {5, nil, 'asdf', {'a'}, nil, 99}
for i=1, #t do
    if i == #t then
        -- 这是最后一个项目。
    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
        -- 对最后一个项目进行操作
    end
end
2013-04-04 18:40:50
用户1022729
用户1022729

你可以尝试编写这样的代码:

    --统计表中的元素数量
    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) do
       if current_item == element_cnt then
         print  "这是最后一个元素"
       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
--这是最后一个元素
  end
end
2013-04-04 18:47:21
用户1847592
用户1847592

这是 missingno 答案的简化版本::-)

for _, v in pairs(t) do
  if next(t,_) == nil then
    -- 在最后一个循环中做些事情
  end
end
2013-04-04 18:52:58