改变 Lua 循环中的步长

我使用 Lua 处理大量数据。 我想用不同的步长在这个循环中移动。大部分数据会让我损失,小部分数据会让我赚钱。当赚钱时,我想以步长为 0.1 慢慢移动,当亏损时,我想以步长为 1 快速移动。 帮我编写这个代码。

step=1
for i=1,10000,step do
 --计算赚钱还是亏损
 if PROFIT then step=0.1
 elseif LOSS then step=1
 end
end
点赞
用户2858170
用户2858170

Lua 参考手册 3.3.5 For 语句如下所示:

for v = e1, e2, e3 do block end

等效于如下代码:

do
  local var, limit, step = tonumber(e1), tonumber(e2), tonumber(e3)
  if not (var and limit and step) then error() end
  var = var - step
  while true do
    var = var + step
    if (step >= 0 and var > limit) or (step < 0 and var < limit) then
      break
    end
    local v = var
    block
  end
end

注意以下几点:

  • 在循环开始前,所有三个控制表达式只被计算一次。它们都必须返回数字。
  • 因此,在循环体内部更改步长是行不通的。如果需要在循环中使用自定义步长,请使用 while 或 repeat 语句,在使用自己的计数器。
2019-03-29 10:04:52
用户4403144
用户4403144

@Piglet 本质上是正确的,但以下是另一个例子,为了更加清晰:

-- 建立假数据
-- 包含100个收益和损失数据点
local allMyData = {}
for i = 1, 100 do
    local data = math.random()
    if data < 0.5 then
        allMyData[i] = "loss!"
    else
        allMyData[i] = "profit!"
    end
end

local data = 1
local step = 1
while data < #allMyData do
    -- 调整步长
    if allMyData[data] == "profit!" then
        step = math.max(1, step - 1) -- 放慢速度!
    else
        step = step + 1 -- 加速!
    end

    -- 向前迈步
    data = data + step
end
2019-03-30 00:34:42