Module:Table

From The Binding of Isaac Retribution Wiki
Jump to navigation Jump to search

Documentation for this module may be created at Module:Table/doc

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


-- 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


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


function p.unique( t, c )
	local result = {}
	for _, v in ipairs( t ) do
		if not p.contains( result, v, c ) then
			result[#result + 1] = v
		end
	end
	return result
end


return p