Меню
Главная
Случайная статья
Настройки
|
Данный модуль предоставляет функции для работы с таблицами Lua. В общем случае, его функции не должны вызываться напрямую через #invoke, а только использоваться в других модулях.
Содержание
Подключение
Для использования функционала модуль сперва следует подключить.
local TableTools = require('Module:TableTools')
isPositiveIntegerTableTools.isPositiveInteger(value)
Возвращает true если value — положительное целое число и false иначе. Хотя эта функция и не относится напрямую к таблицам, она нужна для определения, является ли ключ ключом массива либо же хэш-таблицы.
isNanTableTools.isNan(value)
Возвращает true если value представляет собой NaN и false иначе. Хотя эта функция и не относится напрямую к таблицам, она нужна для определения, может ли значение быть ключом таблицы.
shallowCloneTableTools.shallowClone(t)
Возвращает клон таблицы. Возвращаемое значение представляет собой новую таблицу, но все подтаблицы и функции являются разделяемыми. Метаметоды переносятся, но возвращаемая таблица не будет включать метатаблицу. Если вы хотите скопировать подтаблицы и метатаблицу, используйте mw.clone . Если вы хотите скопировать подтаблицы, но не переносить метатаблицы, используйте [[#deepCopy|deepCopy]] с параметром noMetatable .
removeDuplicatesTableTools.removeDuplicates(t)
Удаляет из массива значения-дубликаты. Функция предназначена для работы только со стандартными массивами: обрабатываются только ключи-положительные целые числа, а все значения после первого nil игнорируются. (Для массивов, содержащих nil , используйте [[#compressSparseArray|compressSparseArray]] перед этой функцией.) Функция старается сохранить порядок следования элементов — оставляется первое вхождение значения, а все последующие удаляются. Например, для таблицы {5, 4, 4, 3, 4, 2, 2, 1} removeDuplicates вернёт {5, 4, 3, 2, 1} .
numKeysTableTools.numKeys(t)
Принимает на вход таблицу t и возвращает массив из положительных целых чисел, которые являются ключами таблицы для данных с непустым значением, отсортированный в порядке возрастания. Например, для таблицы {'foo', nil, 'bar', 'baz', a = 'b'} вызов numKeys вернёт {1, 3, 4} .
affixNumsTableTools.affixNums(t, prefix, suffix)
Принимает на вход таблицу t и возвращает массив из положительных целых чисел, которым соответствуют ключи таблицы с опциональным префиксом prefix и опциональным суффиксом suffix . Например, для таблицы {a1 = 'foo', a3 = 'bar', a6 = 'baz'} и префикса a вызов affixNums вернёт {1, 3, 6} . Все символы в prefix и suffix интерпретируются буквально.
numDataTableTools.numData(t, compress)
Дла таблицы с ключами вида foo1 , bar1 , foo2 и baz2 возвращает таблицы с подтаблицами в формате { [1] = {foo = 'text', bar = 'text'}, [2] = {foo = 'text', baz = 'text'} } . Ключи, не заканчивающиеся числом размещаются в подтаблице other . Опция compress позволяет использовать таблицу для цикла с помощью ipairs .
compressSparseArrayTableTools.compressSparseArray(t)
Принимает на вход массив t с пустыми значениями (nil ) и убирает их, сохраняя порядок, чтобы массив мог использоваться в ipairs . Нечисловые ключи удаляются. Например, для таблицы {1, nil, foo = 'bar', 3, 2} вызов compressSparseArray вернёт {1, 3, 2} .
sparseIpairsTableTools.sparseIpairs(t)
Итератор для перебора элементов разреженного массива t . Аналогичен ipairs , но продолжится до достижения ключа с максимальным числовым значением, в отличе от обычного ipairs , останавливающегося на первом nil . Нечисловые ключи игнорируются.
sparseIpairs может использоваться для цикла for .
for i, v in TableTools.sparseIpairs(t) do
-- code block
end
Обратите внимание, что функция sparseIpairs основана на pairs . Хота в итератор для цикла могут передаваться не все ключи, читаться будут всё равно все.
sizeTableTools.size(t)
Возращает размер таблицы пар ключ-значение. Например, для таблицы {foo = 'foo', bar = 'bar'} вызов size вернёт 2 . Функция также работает и для массивов, но для них следует использовать встроенный оператор языка # . Обратите внимание, что в своей работе функция использует функцию pairs для итерирования по всем ключам.
keysToListTableTools.keysToList(t, keySort)
Возвращает список ключей таблицы, используя либо сортировку по умолчанию, либо произвольную функцию keySort , соотвествующую правилам для функции comp для table.sort .
sortedPairsTableTools.sortedPairs(t, keySort)
Итератор, перебирающий ключи таблицы в порядке, возвращаемом функцией keysToList . Если в таблице используются только числовые ключи, sparseIpairs будет эффективнее.
isArrayTableTools.isArray(t)
Возвращает true , если все ключи таблицы — положительные числа, начиная с 1 .
listToSetTableTools.listToSet(arr)
Создаёт множество на основе значений числовых ключей таблицы arr . Получение значения множества для значений arr вернёт true .
local set = TableTools.listToSet { "a", "b", "c" }
assert(set["a"] == true)
invertTableTools.invert(t)
Транспонирует ключи и значения массива. Например, invert{ "a", "b", "c" } вернёт { a = 1, b = 2, c = 3 }. Работает только для числовых ключей.
deepCopyTableTools.deepCopy(orig, noMetatable, alreadySeen)
Создаёт копию таблицы orig . Как и при использовании mw.clone все значения, не являющиеся функциями, дублируются и идентичность таблиц сохраняется. Если noMetatable выставляется в true , метатаблица (если имеется) не копируется. Может копировать таблицы, загруженные с помощью mw.loadData .
В отличие от этой функции mw.clone не работает с таблицами, загруженными с помощью mw.loadData , и не имеет возможности не копировать метатаблицы.
sparseConcatTableTools.sparseConcat(t, sep)
Производит конкатенацию всех значений для числовых ключей с сохранением их порядка.
lengthTableTools.length(t)
Возвращает длину массива или псевдомассива с ключами вида data1 , data2 и т.д. Использует алгоритм экспоненциального поиска, поэтому производится минимальное количество обращений.
Алгоритм полезен для массивов с метатаблицами (например, frame.args ) и для псевдомассивов. Для обычных массивов предпочтительнее оператор # , реализованный на Си, он будет работать заметно быстрее.
inArrayTableTools.inArray(arr, valueToFind)
Возвращает true если valueToFind входит в arr или false иначе.
|
|