Editing Module:TableTools
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
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 #. | ||
Line 430: | Line 422: | ||
-- frame.args. | -- frame.args. | ||
--]] | --]] | ||
function p.length(t) | |||
local | function p.length(t, prefix) | ||
-- requiring module inline so that [[Module:Exponential search]] | |||
-- 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") |