Module:TableTools: Difference between revisions

From the Croc Wiki, the Croc encyclopedia
Jump to navigationJump to search
Content added Content deleted
(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
-- as "data1", "data2", etc., using an exponental search algorithm.
-- 1 such that t[n + 1] is nil. It is similar to the operator #, but may return
-- 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
while t[i] ~= nil do
i = i + 1
end
return i - 1
end


function p.length(t, prefix)
-- requiring module inline so that [[Module:Exponental 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
function p.inArray(arr, valueToFind)
function p.inArray(arr, valueToFind)
checkType("inArray", 1, arr, "table")
checkType("inArray", 1, arr, "table")