Module:Table

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