Menu
Coddy logo textTech

Итерация по таблицам

Часть раздела Введение в Luau путешествия по Lua на Coddy. Урок 17 из 73.

Ты уже много раз выполнял loop по таблицам Lua: Luau сохраняет те же самые циклы и добавляет типы переменным цикла. Для массивов ipairs проходит по элементам по порядку — от индекса 1 до #t, и ты можешь аннотировать обе переменные:

local temps: {number} = {18, 21, 19}
for day: number, temp: number in ipairs(temps) do
    print(`Day {day}: {temp}`)
end

Помни, что ipairs останавливается на первом отсутствующем индексе: «дырка» nil в середине досрочно завершает цикл. С хорошо поддерживаемыми массивами это редко становится проблемой, но об этом стоит знать.

Для отображений используй pairs, который посещает каждую пару ключ/значение, включая ключи типа string. В отображении {[string]: number} переменные цикла естественным образом имеют типы string и number:

local ages: {[string]: number} = {Alice = 30, Bob = 25}
for name: string, age: number in pairs(ages) do
    print(`{name} is {age}`)
end

Есть один важный нюанс: pairs посещает ключи хеш-части в порядке, который не гарантируется. Он может отличаться между запусками. Когда тебе нужен детерминированный вывод (отсортированные отчёты, тесты), собери ключи в array, выполни для него table.sort, затем пройдись по отсортированным ключам с помощью ipairs и обратись к отображению по индексу.

challenge icon

Задание

Легко

Создайте типизированный array temps: {number}, инициализированный значениями 18, 21, 19 и 24.

Выполните loop по нему с помощью ipairs, указав типы обеих переменных loop (day: number, temp: number). Для каждого элемента выведите в точности:

Day 1: 18

(используя интерполяцию string с обратными кавычками) и добавьте каждую температуру к текущему total.

После loop выведите total в отдельной строке.

Попробуйте сами

-- Напишите код здесь
-- 1) объявить temps: {number} = {18, 21, 19, 24}
-- 2) for day: number, temp: number in ipairs(temps) do ... end
--    печатая `Day {day}: {temp}` и суммируя в total
-- 3) напечатать total после цикла
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Введение в Luau

Потренируйтесь самостоятельно: Онлайн-компилятор Lua