Editing Module:TableTools

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. Read the Privacy Policy to learn what information we collect about you and how we use it.

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


Line 44: Line 48:
--]]
--]]
function p.isNan(v)
function p.isNan(v)
return type(v) == 'number' and tostring(v) == '-nan'
if type(v) == 'number' and tostring(v) == '-nan' then
return true
else
return false
end
end
end


Line 129: Line 137:
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')
s = s:gsub('([%(%)%%%.%[%]%*%+%-%?%^%$])', '%%%1')
return s
end
end


Line 413: Line 422:


--[[
--[[
-- Finds the length of an array, or of a quasi-array with keys such
-- This returns the length of a table, or the first integer key n counting from
-- as "data1", "data2", etc., using an exponential 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 422: Line 430:
-- 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: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
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 Nonbinary Wiki are considered to be released under the Creative Commons Attribution-ShareAlike (see Nonbinary Wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, 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. Do not submit copyrighted work without permission!
Cancel Editing help (opens in new window)

Template used on this page: