Открыть меню
Открыть персональное меню
Вы не представились системе
Your IP address will be publicly visible if you make any edits.

Модуль:Table

Материал из wiki.iccup.org
Версия от 19:38, 3 сентября 2024; DarkMuse (обсуждение | вклад) (Новая страница: «local Class = require('Module:Class') local String = require('Module:StringUtils') local Table = {} ---Randomize the order of elements in the table ---@deprecated Use Array.randomize ---@param tbl table ---@return table function Table.randomize(tbl) return require('Module:Array').randomize(tbl) end ---Get the number of elements in a table ---@param tbl table ---@return integer function Table.size(tbl) local count = 0 for _ in pairs(tbl) do...»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

Стандартная библиотека для работы с таблицами в Lua. Для массивов смотрите Module:Array.

API

Программное имя: Table


copy (tbl: table) → table

Возвращает поверхностную копию таблицы




deepCopy (tbl: table) → table

Возвращает глубокую копию таблицы




filter (tbl: table, predicate: function, argument: any) → table

Фильтрует таблицу с использованием заданной функции предиката, с необязательным вторым аргументом




includes (tbl: table, value: any) → boolean

Возвращает true, если таблица содержит указанный элемент




isEmpty (tbl: table) → boolean

Возвращает true, если таблица пуста




randomize (tbl: table) → table

Перемешивает элементы таблицы на месте с использованием алгоритма Фишера-Йетса




size (tbl: table) → int

Возвращает количество элементов в таблице




uniqueKey (tbl: table) → Key?

Возвращает уникальный ключ в таблице. Возвращает nil, если таблица пуста или имеет несколько ключей.




iter.spairs (tbl: table, order: function) → function

Итерирует по таблице в отсортированном порядке




iter.forEach (tbl: table, lambda: function) → function

Итерирует по таблице по принципу forEach




iter.forEachIndexed (tbl: table, lambda: function) → function

Итерирует по таблице с индексацией




iter.forEachPair (tbl: table, lambda: function) → function

Итерирует по таблице по принципу forEachPair




mergeInto (target: table, ...: table(s)) → table

Копирует элементы из второй таблицы в первую, переопределяя существующие элементы. Первая таблица изменяется в процессе. (Можно вызвать с более чем двумя таблицами. Дополнительные таблицы объединяются в первую таблицу поочередно.)




merge (...: table(s)) → table

Создает таблицу с объединенными записями из входных таблиц, приоритет отдается записям из последующих таблиц. Входные таблицы не изменяются.




map (xTable: table, f: function) → table

Применяет функцию к каждой записи в таблице и размещает результаты в новой таблице.




mapValues (xTable: table, f: function) → table

Применяет функцию к каждому значению в таблице и размещает результаты в новой таблице под теми же ключами.




extract (tbl: table, key: table-key) → value

Удаляет ключ из таблицы и возвращает его значение.




getByPath (tbl: table, path: array) → value

Возвращает значение по указанному пути во вложенной таблице. Путь указывается массивом.




getByPathOrNil (tbl: table, path: array) → value?

Возвращает значение по указанному пути во вложенной таблице, или nil, если доступ невозможен. Путь указывается массивом.




setByPath (tbl: table, path: array, value: any) → nil

Устанавливает значение по указанному пути во вложенной таблице. Путь указывается массивом.




any (tbl: table, predicate: function) → boolean

Возвращает true, если хотя бы одна запись в таблице удовлетворяет предикату.




all (tbl: table, predicate: function) → boolean

Возвращает true, если все записи в таблице удовлетворяют предикату.




pack (...: values) → table

Полифил для функции table.pack в Lua 5.2




mapArgumentsByPrefix (args: table, prefixes: table, f: function) → table

Извлекает ключи с префиксами и числовыми индексами из таблицы аргументов и применяет преобразование к каждому ключу или индексу




mapArguments (args: table, indexFromKey: function, f: function) → table

Извлекает ключи на основе переданной функции `indexFromKey` с числовыми индексами из таблицы аргументов и применяет преобразование к каждому ключу или индексу




Посмотрите всю нашу документацию iCCup здесь.



local Class = require('Module:Class')
local String = require('Module:StringUtils')

local Table = {}

---Randomize the order of elements in the table
---@deprecated Use Array.randomize
---@param tbl table
---@return table
function Table.randomize(tbl)
    return require('Module:Array').randomize(tbl)
end

---Get the number of elements in a table
---@param tbl table
---@return integer
function Table.size(tbl)
    local count = 0
    for _ in pairs(tbl) do
        count = count + 1
    end
    return count
end

---Check if a table includes a value
---@param tbl table
---@param value any
---@param isPattern boolean?
---@return boolean
function Table.includes(tbl, value, isPattern)
    for _, v in pairs(tbl) do
        if (isPattern and string.find(v, value)) or (not isPattern and v == value) then
            return true
        end
    end
    return false
end

---Filter a table by a predicate function
---@generic K, V
---@param tbl table<K, V>
---@param predicate fun(value: V): boolean
---@return table<K, V>
function Table.filter(tbl, predicate)
    local filtered = {}
    for k, v in pairs(tbl) do
        if predicate(v) then
            filtered[k] = v
        end
    end
    return filtered
end

---Check if a table is empty
---@param tbl table?
---@return boolean
function Table.isEmpty(tbl)
    return not next(tbl)
end

---Shallow copy a table
---@generic T: table
---@param tbl T
---@return T
function Table.copy(tbl)
    local copy = {}
    for k, v in pairs(tbl) do
        copy[k] = v
    end
    return copy
end

---Deep copy a table
---@param tbl table
---@param options? {copyMetatable: boolean}
---@return table
function Table.deepCopy(tbl, options)
    options = options or {}
    local function deepcopy(orig)
        local orig_type = type(orig)
        local copy
        if orig_type == 'table' then
            copy = {}
            for orig_key, orig_value in next, orig, nil do
                copy[deepcopy(orig_key)] = deepcopy(orig_value)
            end
            if options.copyMetatable then
                setmetatable(copy, deepcopy(getmetatable(orig)))
            end
        else
            copy = orig
        end
        return copy
    end
    return deepcopy(tbl)
end

---Merge two or more tables
---@param target table
---@param ... table
---@return table
function Table.merge(target, ...)
    for _, tbl in ipairs({...}) do
        for k, v in pairs(tbl) do
            target[k] = v
        end
    end
    return target
end

return Class.export(Table)
Содержание