Это страница документации Модуль: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 иначе.