Menu
CoddyTech

Перебор таблиц

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

Ты уже много раз проходил циклом по таблицам 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]: 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 обходит ключи хеш-части без гарантированного порядка. Порядок может отличаться при каждом запуске. Если тебе нужен детерминированный результат (отсортированные отчёты, тесты), собери ключи в массив, отсортируй его с помощью table.sort, а затем пройдись по отсортированным ключам с помощью ipairs и используй их для обращения к словарю.

challenge icon

Задание

Легко

Выведите температуры за неделю и их сумму.

  1. Объявите local temps: {number} = {12, 15, 11, 14} и local total = 0.
  2. Выполните цикл с for day: number, temp: number in ipairs(temps) do, выведите `Day {day}: {temp}` и прибавьте temp к total.
  3. После цикла выведите total.

Нажмите «Запустить код»: вывод покажет значения от Day 1: 12 до Day 4: 14, а затем 52.

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

-- 1) объявить temps: {number} и total = 0
-- 2) пройти циклом по типизированным day и temp, вывести каждый day, прибавить к total
-- 3) вывести total

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

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