Итерация по таблицам
Часть раздела Введение в 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 и обратись к отображению по индексу.
Задание
ЛегкоСоздайте типизированный 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 после цикла
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Введение в 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-словариПотренируйтесь самостоятельно: Онлайн-компилятор Lua