439
edits
No edit summary |
m (6 revisions imported from wikipedia:Module:TableTools: see Topic:Vtixlm0q28eo6jtf) |
||
(5 intermediate revisions by 5 users not shown) | |||
Line 30: | Line 30: | ||
--]] | --]] | ||
function p.isPositiveInteger(v) | function p.isPositiveInteger(v) | ||
return type(v) == 'number' and v >= 1 and floor(v) == v and v < infinity | |||
end | end | ||
Line 48: | Line 44: | ||
--]] | --]] | ||
function p.isNan(v) | function p.isNan(v) | ||
return type(v) == 'number' and tostring(v) == '-nan' | |||
end | end | ||
Line 137: | Line 129: | ||
local function cleanPattern(s) | local function cleanPattern(s) | ||
-- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally. | -- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally. | ||
return s:gsub('([%(%)%%%.%[%]%*%+%-%?%^%$])', '%%%1') | |||
end | end | ||
Line 422: | Line 413: | ||
--[[ | --[[ | ||
-- | -- Finds the length of an array, or of a quasi-array with keys such | ||
-- | -- as "data1", "data2", etc., using an exponential search algorithm. | ||
-- It is similar to the operator #, but may return | |||
-- a different value when there are gaps in the array portion of the table. | -- a different value when there are gaps in the array portion of the table. | ||
-- Intended to be used on data loaded with mw.loadData. For other tables, use #. | -- Intended to be used on data loaded with mw.loadData. For other tables, use #. | ||
-- Note: #frame.args in frame object always be set to 0, regardless of | |||
-- the number of unnamed template parameters, so use this function for | |||
-- frame.args. | |||
--]] | --]] | ||
function p.length(t) | |||
local | function p.length(t, prefix) | ||
-- requiring module inline so that [[Module:Exponential search]] | |||
i = i | -- which is only needed by this one function | ||
-- doesn't get millions of transclusions | |||
local expSearch = require("Module:Exponential search") | |||
checkType('length', 1, t, 'table') | |||
checkType('length', 2, prefix, 'string', true) | |||
return expSearch(function(i) | |||
local key | |||
if prefix then | |||
key = prefix .. tostring(i) | |||
else | |||
key = i | |||
end | |||
return t[key] ~= nil | |||
end) or 0 | |||
end | end | ||
function p.inArray(arr, valueToFind) | function p.inArray(arr, valueToFind) | ||
checkType("inArray", 1, arr, "table") | checkType("inArray", 1, arr, "table") |