Итерация с помощью ipairs()
Часть раздела Logic & Flow путешествия по Lua на Coddy — урок 2 из 54.
Хотя pairs() работает с любой структурой таблицы, Lua предоставляет специализированную функцию под названием ipairs(), специально разработанную для таблиц в стиле списков. Эта функция перебирает таблицы в последовательном порядке, начиная с индекса 1 и продолжая до тех пор, пока не встретит значение nil.
Синтаксис для ipairs() похож на pairs():
for index, value in ipairs(myList) do
-- используйте index и value здесь
endВот пример со списком квестовых предметов:
local questItems = {"Map", "Compass", "Torch", "Rope"}
for i, item in ipairs(questItems) do
print(i .. ". " .. item)
endВывод:
1. Map
2. Compass
3. Torch
4. RopeКлючевое отличие от pairs() заключается в том, что ipairs() немедленно останавливается, когда находит значение nil, даже если после него есть другие элементы.
Задание
ЛегкоНапишите функцию listTasks, которая принимает таблицу tasks и возвращает отформатированную строку со списком всех задач и их порядковыми номерами.
Используйте ipairs() для последовательного перебора задач и создания строки, где каждая строка показывает номер задачи, за которым следует название задачи в формате number. task. Каждая задача должна быть на отдельной строке.
Параметры:
tasks(table): Таблица в стиле списка, содержащая названия задач в виде строк
Возвращает: Строку, в которой каждая задача пронумерована и находится на отдельной строке. Формат:
1. task1
2. task2
3. task3Шпаргалка
ipairs() перебирает таблицы в стиле списка в последовательном порядке, начиная с индекса 1 и останавливаясь на первом значении nil:
for index, value in ipairs(myList) do
-- используйте index и value здесь
endПример:
local questItems = {"Map", "Compass", "Torch", "Rope"}
for i, item in ipairs(questItems) do
print(i .. ". " .. item)
end
-- Output:
-- 1. Map
-- 2. Compass
-- 3. Torch
-- 4. RopeКлючевое отличие: В отличие от pairs(), ipairs() немедленно останавливается, когда встречает значение nil, даже если после него есть другие элементы.
Попробуйте сами
function listTasks(tasks)
-- Напишите код здесь
end
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
1Продвинутая итерация таблиц
Итерация с помощью pairs()Итерация с помощью ipairs()pairs() против ipairs()Повторение — Лист персонажа2Дополнительные функции библиотеки table
table.concat()Создание таблиц и unpack()table.sort()Пользовательская сортировка с помощью функцийИтоги — Таблица рекордов