更改Lua循环中的步骤

时间:2019-03-29 09:46:13

标签: lua

我使用Lua处理大量数据。 我想以不同的步骤进入这个圈子。很大一部分数据给我带来了损失。一小部分数据给我带来利润。当获利时,我想以步长= 0.1缓慢地在圆内移动,当亏损时,我想以步骤1迅速地移动。 帮我编码。

step=1
for i=1,10000,step do
 --count profit or loss
 if PROFIT then step=0.1 
 elseif LOSS then step=1
 end
end

2 个答案:

答案 0 :(得分:3)

来自Lua Reference Manual 3.3.5 For Statement

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
     

请注意以下几点:

     

在循环之前,所有三个控件表达式仅被评估一次   开始。它们都必须产生数字。

因此,更改for循环体内的步骤将不起作用。如果要在循环中更改增量,请使用while或repeat语句以及自己的计数器。

答案 1 :(得分:1)

@Piglet本质上是正确的,但是为了清楚起见,这是另一个示例:

-- Create some fake data
-- 100 data points of profit and loss
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
    -- Adjust step
    if allMyData[data] == "profit!" then
        step = math.max(1, step - 1) -- Slow down!
    else
        step = step + 1 -- Speed up!
    end

    -- Step ahead
    data = data + step
end
相关问题