Editing Module:TableTools

Jump to navigation Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

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)
if type(v) == 'number' and v >= 1 and floor(v) == v and v < infinity then
return type(v) == 'number' and v >= 1 and floor(v) == v and v < infinity
return true
else
return false
end
end
end


Line 48: Line 44:
--]]
--]]
function p.isNan(v)
function p.isNan(v)
if type(v) == 'number' and tostring(v) == '-nan' then
return type(v) == 'number' and tostring(v) == '-nan'
return true
else
return false
end
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.
s = s:gsub('([%(%)%%%.%[%]%*%+%-%?%^%$])', '%%%1')
return s:gsub('([%(%)%%%.%[%]%*%+%-%?%^%$])', '%%%1')
return s
end
end


Line 422: Line 413:


--[[
--[[
-- This returns the length of a table, or the first integer key n counting from
-- Finds the length of an array, or of a quasi-array with keys such
-- 1 such that t[n + 1] is nil. It is similar to the operator #, but may return
-- 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 i = 1
function p.length(t, prefix)
while t[i] ~= nil do
-- requiring module inline so that [[Module:Exponential search]]
i = i + 1
-- which is only needed by this one function
end
-- doesn't get millions of transclusions
return i - 1
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")
Please note that all contributions to Meta Wiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see Meta Wiki:Copyrights for details). Do not submit copyrighted work without permission!
Cancel Editing help (opens in new window)

Template used on this page: