Module:TableTools: Difference between revisions

From Tardis Wiki, the free Doctor Who reference
329 bytes added ,  21 December 2019
Finally getting around to merging in Module:Array length (originally written by Mr. Stradivarius) over six months after writing the merged code, also minor code simplify per Dinoguy1000 on talk page
(Implementing talk page edit requested)
(Finally getting around to merging in Module:Array length (originally written by Mr. Stradivarius) over six months after writing the merged code, also minor code simplify per Dinoguy1000 on talk page)
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 422: Line 414:


--[[
--[[
-- 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 exponental 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 423:
-- 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:Exponental 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")
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.