Зацикливание элементов в массиве

Я новичок в Lua, и у меня проблема с распечаткой значений массива.

После поиска в Google я пришел к этому, но он печатает только последний элемент в массиве, 'armor', Что я делаю неправильно? Кроме того, как я могу добавить запятую после каждого элемента?

local items = {'bread', 'shield', 'boots', 'legs', 'armor'}

for i, item in ipairs(items) do
    text = item
end

William:Speak("I am interested in the following: ".. text)

2 ответа

Решение

Вы печатаете после того, как текст настроен на хлеб, щит, сапоги, ноги, а затем броню. Вот почему вы видите только "броню". Вы выполняете итерацию правильно, но если вы хотите перечислить все из них, сделайте это...

local items = {'bread', 'shield', 'boots', 'legs', 'armor'}

for i, item in ipairs(items) do
    text = item
    William:speak("I am interested in the following: ".. text)
end

Это заставляет его говорить каждый раз, когда вы проходите через цикл.

Если вы хотите, чтобы они были в одной строке, попробуйте это...

local items = {'bread', 'shield', 'boots', 'legs', 'armor'}

for i, item in ipairs(items) do
    text = text .. item
end
William:speak("I am interested in the following: ".. text)

Я не проверял это, но это может решить вашу проблему

local items = {'bread', 'shield', 'boots', 'legs', 'armor'}

for i, item in ipairs(items) do
    if item == items.length - 1 then
        text = text .. item
    else
        text = text .. item .. ", "
    end
end
William:speak("I am interested in the following: ".. text)

Более короткий способ сделать конкатенацию с запятой также может быть ( источник):

local items = {'bread', 'shield', 'boots', 'legs', 'armor'}
conc = table.concat(items, ",")

William:speak("I am interested in the following: ".. conc)
Другие вопросы по тегам