Binding of Isaac: Rebirth Wiki
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 == e then
+
for _, v in pairs( t ) do
  +
if v[c] == e[c] then
return true
+
return true
  +
end
  +
end
  +
else
 
for _, v in pairs( t ) do
  +
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 k, v in pairs( t ) do
+
for _, v in pairs( t ) do
if not p.contains( result, v ) then
+
if not p.contains( result, v, c ) then
result[k] = v
+
table.insert( result, v )
 
end
 
end
 
end
 
end

Revision as of 16:54, 24 June 2020


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