Bienvenidos sean a este post, hoy volveremos a hablar sobre algo que ya hemos visto en este post como es table.concat.

Anuncios

Esta funcion toma una lista de cadenas y devuelve el resultado de concatenar todas estas cadenas, tambien se puede usar un segundo argumento que especifica un separador de cadena que puede ser insertado entre cadena y cadena de la lista, la funcion tambien acepta otro dos argumentos opcionales que especifican los indices de la primera y ultima cadena a concatenar, la siguiente funcion es una interesante generalizacion de table.concat porque acepta listas anidadas de cadenas:

function rconcat(l)
	if type(l) ~= "table" then return l end
	local res = {}
	for i = 1, #l do
		res[i] = rconcat(l[i])
	end
	return table.concat(res)
end
Anuncios

En este caso primero chequearemos si el tipo de l (argumento enviado a la funcion) es distinto de table, en caso de ser afirmativo devuelve el argumento informado y sale de la funcion, de lo contrario continua y crea una tabla local llamada res, nuestro siguiente paso es un bucle for donde el limite esta definido por el tamaño de l donde por cada elemento rconcat se llama recursivamente para poder concatenar una posible lista anidada, una vez finalizado devuelve por medio de table.concat el resultado parcial en res, el cual obtuvimos en el bucle anterior, para entender mejor esto apliquemos el codigo anterior en el interprete de Lua, y luego usemos el siguiente chunk:

print(rconcat{{"Tengan ", {"un"}}," hermoso"," y ",{{"buen"},{" dia"}}})
Anuncios

Si lo ejecutan deberan obtener una salida como esta:

> print(rconcat{{"Tengan ", {"un"}}," hermoso"," y ",{{"buen"},{" dia"}}})
Tengan un hermoso y buen dia
Anuncios

Como pueden ver funciono correctamente si ingresan un texto que no sea una tabla obtendremos el siguiente resultado:

> print(rconcat("un texto de ejemplo"))
un texto de ejemplo
Anuncios

Por ultimo si modificamos la siguiente linea en el codigo:

return table.concat(res)

Por esta otra:

return table.concat(res,"->")
Anuncios

Si volvemos a ejecutar este comando:

print(rconcat{{"Tengan", {"un"}},"hermoso","y",{{"buen"},{"dia"}}})

Obtendremos esta salida:

Anuncios
> print(rconcat{{"Tengan", {"un"}},"hermoso","y",{{"buen"},{"dia"}}})
Tengan->un->hermoso->y->buen->dia

Como pueden ver se agrego el separador que habiamos comentado al principio, tenganlo en cuenta si necesitan que el codigo tenga separadores de este estilo u otros similares.

Anuncios

En resumen, hoy hemos visto un poco mas a fondo como es la concatenacion en tablas, como podemos crear una funcion simple que no solamente nos permitira concatenar tablas sino tambien listas anidadas, espero les haya sido util sigueme en Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00