pairs() против ipairs()
Часть раздела Логика и управление потоком путешествия по Lua на Coddy — урок 3 из 54.
Теперь, когда вы изучили и pairs(), и ipairs(), важно понимать, когда использовать каждый из них. Выбор полностью зависит от структуры вашей таблицы и того, чего вы пытаетесь достичь.
Используйте ipairs(), когда у вас есть таблица в стиле списка с последовательными целочисленными ключами, начинающимися с 1. Она обрабатывает элементы по порядку и останавливается на первом значении nil, что делает её идеальной для массивов, где важен порядок.
Используйте pairs(), когда в вашей таблице есть строковые ключи, смешанные типы ключей или когда вам нужно получить доступ ко всем записям независимо от пропусков. Она перебирает каждую пару ключ-значение в таблице без какого-либо определенного порядка.
Рассмотрим эту смешанную таблицу:
local gameData = {
"Level 1",
"Level 2",
"Level 3",
currentLevel = 2,
playerName = "Hero"
}Если вы используете ipairs(), вы увидите только три строки уровней. Если вы используете pairs(), вы увидите все пять записей, включая строковые ключи.
Задание
ЛегкоНапишите функцию countSequentialItems, которая принимает таблицу data и возвращает количество элементов с последовательными целочисленными ключами.
Используйте ipairs() для подсчета количества элементов в последовательной части таблицы (начиная с индекса 1 до первого nil). Это поможет вам понять разницу между ipairs() и pairs() при работе со смешанными таблицами.
Параметры:
data(table): Смешанная таблица, содержащая как последовательные целочисленные ключи, так и строковые ключи
Возвращает: Количество последовательных элементов (number)
Попробуйте сами
function countSequentialItems(data)
-- Напишите код здесь
end
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутая итерация таблиц
Итерация с помощью pairs()Итерация с помощью ipairs()pairs() против ipairs()Повторение — Лист персонажа2Дополнительные функции библиотеки table
table.concat()Создание таблиц и unpack()table.sort()Пользовательская сортировка с помощью функцийИтоги — Таблица рекордов