Понимание нескольких условий в цикле C - PullRequest
2 голосов
/ 06 ноября 2011

есть кусок кода C

int i, j = 0;
for (i = 0, j = n-1; i < n; j = i++) {
    // array operations
}

что я пытаюсь конвертировать в код Lua

local j = n-1
for i = 1, n do -- arrays are 1-based in Lua
    -- array operations
    j = i+1
end

но по какой-то причине код Lua не работает. Я получаю эту петлю C правильно?

Ответы [ 4 ]

2 голосов
/ 06 ноября 2011

Представьте массив как кольцевой буфер.i - текущий элемент, а j - всегда предыдущий:

n = 5
local j = n
for i = 1, n do -- arrays are 1-based in Lua
    -- array operations
    io.write('i=', i, ' j=', j, '\n')
    j = i
end

Демо :

i=1 j=5
i=2 j=1
i=3 j=2
i=4 j=3
i=5 j=4
2 голосов
/ 06 ноября 2011

Я не знаю Lua, но то, что делает код на C:

На каждой итерации:

Назначьте i для j: j = i;Затем увеличьте i на 1: i = i + 1;

Похоже, ваш код Lua должен быть j = i вместо j = i + 1

1 голос
/ 06 ноября 2011

Нет, j всегда на единицу меньше i, если i не равно 0, тогда j равно n-1. Поэтому j = i+1 должно быть j = i, так как i будет увеличено в следующей итерации.

Я не знаю Луа, поэтому не могу быть уверен.

0 голосов
/ 06 ноября 2011

Вероятно, не лучше всего преобразовать его в цикл lua for; используйте цикл while:

local i , j = 0 , n-1
while i < n do
    --array operations
    j = i
    i = i + 1
end

Не то чтобы код имел много смысла .... если вы хотите преобразовать в индексирование на основе 1, также используйте i , j = 1 , n и i<=n

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...