我使用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
答案 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