Модуль:TableTools/doc
Это страница документации Модуль:TableTools.
__EXPECTED_UNCONNECTED_PAGE__
Этот модуль относится к критическим. У него очень много включений или он используется с подстановкой. Из-за опасности вандализма или ошибочного редактирования он был защищён. |
Этот шаблон реализован на основе Lua с использованием модуля Exponential search. |
Данный модуль предоставляет функции для работы с таблицами 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 иначе.