mNo edit summary |
m (Add column filtering parameter) |
||
Line 2: | Line 2: | ||
− | function p.contains( t, e ) |
+ | function p.contains( t, e, c ) |
+ | if c then |
||
⚫ | |||
− | + | for _, v in pairs( t ) do |
|
+ | if v[c] == e[c] then |
||
− | return true |
+ | return true |
+ | end |
||
+ | end |
||
+ | else |
||
⚫ | |||
+ | if v == e then |
||
+ | return true |
||
+ | end |
||
end |
end |
||
end |
end |
||
Line 144: | Line 152: | ||
− | function unique( t ) |
+ | function unique( t, c ) |
local result = {} |
local result = {} |
||
− | for |
+ | for _, v in pairs( t ) do |
− | if not p.contains( result, v ) then |
+ | if not p.contains( result, v, c ) then |
− | result |
+ | table.insert( result, v ) |
end |
end |
||
end |
end |
Revision as of 16:54, 24 June 2020
The above documentation is transcluded from Module:Table/doc. (edit | history)
local p = {}
function p.contains( t, e, c )
if c then
for _, v in pairs( t ) do
if v[c] == e[c] then
return true
end
end
else
for _, v in pairs( t ) do
if v == e then
return true
end
end
end
return false
end
-- Get parameters of the template and the article from the frame (usually f)
-- DEPRECATED
function p.getArgs( f )
local args = {}
if f.args then
-- Add template parameters
for i, j in pairs( f.args ) do
args[i] = j
end
-- Add transclusion parameters (parent), overwrite template parameters
for k, l in pairs( f:getParent().args ) do
args[k] = l
end
else
args = f
end
return args
end
-- DEPRECATED
function p.getParametersCount( f )
local args = p.trimAll( p.getArgs( f ) )
local parametersCount = 0
if args.numerical then
local i = 1
while args[i] do
parametersCount = parametersCount + 1
i = i + 1
end
else
for i, j in pairs( args ) do
parametersCount = parametersCount + 1
end
end
return parametersCount
end
-- Do string.gsub to all values in a table
function p.gsub( t, pattern, repl )
local result = {}
for k, v in pairs( t ) do
if type( v ) == 'string' then
result[k] = string.gsub( v, pattern, repl )
else
result[k] = v
end
end
return result
end
-- Do string.gsub to all indexes in a table
function p.igsub( t, pattern, repl )
local result = {}
for k, v in pairs( t ) do
result[string.gsub( k, pattern, repl )] = v
end
return result
end
function p.key( t, e )
for k, v in pairs( t ) do
if v == e then
return k
end
end
return 0
end
function p.map( t, f )
local result = {}
for k, v in pairs( t ) do
result[k] = f( v )
end
return result
end
function p.merge( ... )
local result = {}
for _, table in ipairs( arg ) do
for k, v in pairs( table ) do
result[k] = v
end
end
return result
end
-- DEPRECATED
function p.search( f )
local args = p.trimAll( p.getArgs( f ) )
if args.index then
for i, j in pairs( args ) do
if args.object == j then
return i
end
end
else
local k = 1
repeat
if args.object == args[k] then
return k
end
k = k + 1
until not args[k]
end
return nil
end
function p.trim( t, toRemove, keepEmptyParams )
local result = {}
for k, v in pairs( t ) do
if type( v ) == 'string' then
result[k] = mw.text.trim( v ) ~= '' and ( toRemove and mw.text.trim( v, toRemove ) or mw.text.trim( v ) ) or keepEmptyParams and ''
else
result[k] = v
end
end
return result
end
-- Do mw.text.trim to all values in a table
-- DEPRECATED
p.trimAll = p.trim
function unique( t, c )
local result = {}
for _, v in pairs( t ) do
if not p.contains( result, v, c ) then
table.insert( result, v )
end
end
return result
end
return p