Итерация по таблицам
Часть раздела Введение в Luau путешествия по Lua на Coddy — урок 17 из 73.
Вы уже много раз перебирали таблицы 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 и обратитесь к словарю по индексу.
Задание
ЛегкоСоздайте типизированный массив temps: {number}, инициализированный значениями 18, 21, 19 и 24.
Переберите его с помощью ipairs, аннотировав обе переменные цикла (day: number, temp: number). Для каждого элемента выведите ровно:
Day 1: 18(используя интерполяцию строк с обратными кавычками) и прибавляйте каждую температуру к общей сумме.
После цикла выведите общую сумму на отдельной строке.
Попробуйте сами
-- Напишите код здесь
-- 1) объявите temps: {number} = {18, 21, 19, 24}
-- 2) for day: number, temp: number in ipairs(temps) do ... end
-- печатая `Day {day}: {temp}` и суммируя в total
-- 3) выведите total после цикла
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Введение в Luau
1Начало работы с Luau
Что такое Luau?Почему именно Luau?Ваш первый код на LuauПроверка типов и режимы ошибокИтоги: Введение в Luau4Работа с функциями
Типизация параметров и возвращаемых значенийТипизация анонимных функцийФункции, ничего не возвращающиеНеобязательные параметрыЗначения параметров по умолчаниюФункции с переменным числом аргументовОпределение типов функцийИтоги: типизированные функции2Базовые типы
Основные типы: num, str, boolТип 'any': лазейка в типизацииТип 'unknown'Nil и опциональные типыВывод типов на практикеЯвные аннотации типовИтоги: практика по базовым типам5Псевдонимы, объединения и пересечения
Псевдонимы типов для примитивовТипы объединения (Union)Работа с типами объединенияЛитеральные типыТипы пересечения (Intersection)Комбинирование псевдонимов типовИтоги: Сложные комбинации типов3Типизированные таблицы: Массивы и Map-словари
Типизированные массивыДобавление и чтение элементовЧто такое тип Map?Объявление и доступ к Map-словарямИтерация по таблицамТаблицы смешанной формыМногомерные типизированные массивыtable.unpack и VarargsИтоги: Массивы и Map-словари