Modul:TableTools: Unterschied zwischen den Versionen

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)
Zeile 30: Zeile 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


Zeile 48: Zeile 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


Zeile 422: Zeile 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 #.
Zeile 430: Zeile 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")
Anonymer Benutzer