Módulo:Tablas
Apariencia
Esta documentación está transcluida desde Módulo:Tablas/doc.
Los editores pueden experimentar en la zona de pruebas de este módulo.
Por favor, añade las categorías e interwikis a la subpágina de documentación. Subpáginas de este módulo.
Los editores pueden experimentar en la zona de pruebas de este módulo.
Por favor, añade las categorías e interwikis a la subpágina de documentación. Subpáginas de este módulo.
local z = {}
function z.tostring(tabla, identacion)
identacion = identacion or '\n'
local resultado = ''
if not tabla then
return
end
for k,v in pairs(tabla) do
if type(k) == 'string' then
k2='"' .. k .. '"'
else
k2=k
end
if type(v)=='table' then
resultado = resultado .. identacion .. k2 .. ': {' .. z.tostring(v,identacion .. ' ') .. identacion .. '}'
elseif type(v)=='string' then
resultado = resultado .. identacion .. k2 .. ': "' .. v .. '"'
else
resultado = resultado .. identacion .. k2 .. ': ' .. tostring(v)
end
end
return resultado
end
function z.elemento(tabla, indice1, indice2, indice3, indice4, indice5, indice6, indice7)
local resultado
if not tabla or not indice1 then
return
end
resultado = tabla[indice1]
if not indice2 or not resultado then
return resultado
end
resultado = resultado[indice2]
if not indice3 or not resultado then
return resultado
end
resultado = resultado[indice3]
if not indice4 or not resultado then
return resultado
end
resultado = resultado[indice4]
if not indice5 or not resultado then
return resultado
end
resultado = resultado[indice5]
if not indice6 or not resultado then
return resultado
end
resultado = resultado[indice6]
if not indice7 or not resultado then
return resultado
end
resultado = resultado[indice7]
return resultado
end
function z.en(tabla, elemento)
if not elemento then
return
end
for k,v in pairs( tabla ) do
if v == elemento then
return k
end
end
end
function z.copiarElementosConValor(original)
local copia= {}
for k,v in pairs(original) do
if v~='' then
copia[k] = original[k]
end
end
return copia
end
function z.insertar(tabla, elemento)
if not z.en(tabla, elemento) then
table.insert(tabla, elemento)
end
end
function z.insertarElementosConValor(origen, destino)
for k,v in pairs(origen) do
if v~='' then
table.insert(destino, v)
end
end
return copia
end
function z.sonIguales(tabla1, tabla2)
if not tabla1 or not tabla2 then
return false
end
if tabla1 == tabla2 then
return true
end
for k,v in pairs(tabla1) do
if tabla2[k] ~= v then
return false
end
end
for k,v in pairs(tabla2) do
if not tabla1[k] then
return false
end
end
return true
end
function z.ordenarFuncion(tabla, funcion)
local funcionInestable = funcion
-- Añadir a la tabla un campo con el orden
for i,n in ipairs(tabla) do tabla[i].orden = i end
table.sort(tabla,
function(a,b)
if funcionInestable(a, b) then return true -- a < b
elseif funcionInestable(b, a) then return false -- b < a
elseif a.orden <= b.orden then return true -- a = b y a aparece antes que b
else return false -- a = b y b aparece antes que a
end
end)
end
function z.ordenar(tabla, criterio)
if type(criterio) == 'table' then
z.ordenarFuncion(tabla,
function(a,b)
for i,campo in ipairs(criterio) do
if a[campo] < b[campo] then return true
elseif a[campo] > b[campo] then return false
end
end
return false -- Todos los valores son iguales
end
)
else
z.ordenarFuncion(tabla, criterio)
end
end
return z