在Lua循环中更改步骤

问题描述 投票:0回答:2

我使用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
lua
2个回答
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
投票

@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
© www.soinside.com 2019 - 2024. All rights reserved.