Это страница документации Модуль:TableTools.

Данный модуль предоставляет функции для работы с таблицами Lua. В общем случае, его функции не должны вызываться напрямую через #invoke, а только использоваться в других модулях.

ПодключениеПравить

Для использования функционала модуль сперва следует подключить.

local TableTools = require('Module:TableTools')

isPositiveIntegerПравить

TableTools.isPositiveInteger(value)

Возвращает true если value — положительное целое число и false иначе. Хотя эта функция и не относится напрямую к таблицам, она нужна для определения, является ли ключ ключом массива либо же хэш-таблицы.

isNanПравить

TableTools.isNan(value)

Возвращает true если value представляет собой NaN и false иначе. отя эта функция и не относится напрямую к таблицам, она нужна для определения, может ли значение быть ключом таблицы.

shallowCloneПравить

TableTools.shallowClone(t)

Возвращает клон таблицы. Возвращаемаое значение представляет собой нвоую таблицу, но все подтаблицы и функции являются разделяемыми. Метаметоды переносятся, но возвращаемая таблица не будет включать метатаблицу. Если вы хотите скопировать подтаблицы и метатаблицу, используйте mw.clone. Если вы хотите скопировать подтаблицы, но не переносить метатаблицы, используйте [[#deepCopy|deepCopy]] с параметром noMetatable.

removeDuplicatesПравить

TableTools.removeDuplicates(t)

Удаляет из массива значения-дубликаты. Функция предназначена для работы только со стандартными массивами: обрабатываются только ключи-положительные целые числа, а все значения после первого nil игнорируются. (Для массивов, содержащих nil, используйте [[#compressSparseArray|compressSparseArray]] перед этой функцией.) Функция старается сохранить порядок следования элементов — оставляется первое вхождение значения, а все последующие удаляются. Например, для таблицы {5, 4, 4, 3, 4, 2, 2, 1} removeDuplicates вернёт {5, 4, 3, 2, 1}.

numKeysПравить

TableTools.numKeys(t)

Принимает на вход таблицу t и возвращает массив из положительных целых чисел, которые являются ключами таблицы для данных с непустым значением, отсортированный в порядке возрастания. Например, для таблицы {'foo', nil, 'bar', 'baz', a = 'b'} вызов numKeys вернёт {1, 3, 4}.

affixNumsПравить

TableTools.affixNums(t, prefix, suffix)

Принимает на вход таблицу t и возвращает массив из положительных целых чисел, которым соответствуют ключи таблицы с опциональным префиксом prefix и опциональным суффиксом suffix. Например, для таблицы {a1 = 'foo', a3 = 'bar', a6 = 'baz'} и префикса a вызов affixNums вернёт {1, 3, 6}. Все символы в prefix и suffix интерпретируются буквально.

numDataПравить

TableTools.numData(t, compress)

Дла таблицы с ключами вида foo1, bar1, foo2 и baz2 возвращает таблицы с подтаблицами в формате { [1] = {foo = 'text', bar = 'text'}, [2] = {foo = 'text', baz = 'text'} }. Ключи, не заканчивающиеся числом размещаются в подтаблице other. Опция compress позволяет использовать таблицу для цикла с помощью ipairs.

compressSparseArrayПравить

TableTools.compressSparseArray(t)

Принимает на вход массив t с пустыми значениями (nil) и убирает их, сохраняя порядок, чтобы массив мог использоваться в ipairs. Нечисловые ключи удаляются. Например, для таблицы {1, nil, foo = 'bar', 3, 2} вызов compressSparseArray вернёт {1, 3, 2}.

sparseIpairsПравить

TableTools.sparseIpairs(t)

Итератор для перебора элементов разреженного массива t. Аналогичен ipairs, но продолжится до достижения ключа с максимальным числовым значением, в отличе от обычного ipairs, останавливающегося на первом nil. Нечисловые ключи игнорируются.

sparseIpairs может использоваться для цикла for.

for i, v in TableTools.sparseIpairs(t) do
   -- code block
end

Обратите внимание, что функция sparseIpairs основана на pairs. Хота в итератор для цикла могут передаваться не все ключи, читаться будут всё равно все.

sizeПравить

TableTools.size(t)

Возращает размер таблицы пар ключ-значение. Например, для таблицы {foo = 'foo', bar = 'bar'} вызов size вернёт 2. Функция также работает и для массивов, но для них следует использовать встроенный оператор языка #. Обратите внимание, что в своей работе функция использует функцию pairs для итерирования по всем ключам.

keysToListПравить

TableTools.keysToList(t, keySort)

Возвращает список ключей таблицы, используя либо сортировку по умолчанию, либо произвольную функцию keySort, соотвествующую правилам для функции comp для table.sort.

sortedPairsПравить

TableTools.sortedPairs(t, keySort)

Итератор, перебирающий ключи таблицы в порядке, возвращаемом функцией keysToList. Если в таблице используются только числовые ключи, sparseIpairs будет эффективнее.

isArrayПравить

TableTools.isArray(t)

Возвращает true, если все ключи таблицы — положительные числа, начиная с 1.

listToSetПравить

TableTools.listToSet(arr)

Создаёт множество на основе значений числовых ключей таблицы arr. Получение значения множества для значений arr вернёт true.

local set = TableTools.listToSet { "a", "b", "c" }
assert(set["a"] == true)

invertПравить

TableTools.invert(t)

Транспонирует ключи и значения массива. Например, invert{ "a", "b", "c"} вернёт { a = 1, b = 2, c = 3}. Работает только для числовых ключей.

deepCopyПравить

TableTools.deepCopy(orig, noMetatable, alreadySeen)

Создаёт копию таблицы orig. Как и при использовании mw.clone все значения, не являющиеся функциями, дублируются и идентичность таблиц сохраняется. Если noMetatable выставляется в true, метатаблица (если имеется) не копируется. Может копировать таблицы, загруженные с помощью mw.loadData.

В отличие от этой функции mw.clone не работает с таблицами, загруженными с помощью mw.loadData, и не имеет возможности не копировать метатаблицы.

sparseConcatПравить

TableTools.sparseConcat(t, sep)

Производит конкатенацию всех значений для числовых ключей с сохранением их порядка.

lengthПравить

TableTools.length(t)

Возвращает длину массива или псевдомассива с ключами вида data1, data2 и т.д. Использует алгоритм экспоненциального поиска, поэтому производится минимальное количество обращений.

Алгоритм полезен для массивов с метатаблицами (например, frame.args) и для псевдомассивов. Для обычных массивов предпочтительнее оператор #, реализованный на Си, он будет работать заметно быстрее.

inArrayПравить

TableTools.inArray(arr, valueToFind)

Возвращает true если valueToFind входит в arr или false иначе.