Menu
Coddy logo textTech

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(), вы увидите все пять записей, включая строковые ключи.

challenge icon

Задание

Легко

Напишите функцию countSequentialItems, которая принимает таблицу data и возвращает количество элементов с последовательными целочисленными ключами.

Используйте ipairs() для подсчета количества элементов в последовательной части таблицы (начиная с индекса 1 до первого nil). Это поможет вам понять разницу между ipairs() и pairs() при работе со смешанными таблицами.

Параметры:

  • data (table): Смешанная таблица, содержащая как последовательные целочисленные ключи, так и строковые ключи

Возвращает: Количество последовательных элементов (number)

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

function countSequentialItems(data)
    -- Напишите код здесь
end
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком