我使用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 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语句。
@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