Изменить шаг в цикле Lua - PullRequest
0 голосов
/ 29 марта 2019

Я работаю с большим количеством данных, используя 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 ]

3 голосов
/ 29 марта 2019

С Lua Справочное руководство 3.3.5 Для выписки :

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 голос
/ 30 марта 2019

@ Пятачок по сути прав, но вот еще один пример, для ясности:

-- 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...