print - lua script table insert
Compruebe si la matriz contiene un valor especĂfico (3)
Tengo esta matriz, con algunos valores (int) y quiero verificar si un valor dado por el usuario es igual a un valor en esa cadena. Si es así, envíe un mensaje como "Consiguió su cadena".
Ejemplo de la lista:
local op = {
{19},
{18},
{17}
}
if 13 == (the values from that array) then
message
else
other message
¿Cómo puede hacerse esto?
La op
de la tabla de su pregunta es en realidad una matriz (tabla) de matrices.
Para verificar si existe un valor en una tabla:
local function contains(table, val)
for i=1,#table do
if table[i] == val then
return true
end
end
return false
end
local table = {1, 2, 3}
if contains(table, 3) then
print("Value found")
end
También puede hacer que la comprobación de si el valor exista en su matriz sea más eficiente al mover sus valores al índice y asignarles el valor verdadero.
Luego, cuando revise su tabla, simplemente verifique si existe un valor en ese índice, lo que le ahorrará tiempo porque no necesita pasar por toda la tabla en el peor de los casos ...
Este es el ejemplo que tenía en mente:
local op = {
[19]=true,
[18]=true,
[17]=true
}
if op[19] == true then
print("message")
else
print("other message")
end
Lua no tiene matrices estrictas como otros idiomas, solo tiene tablas hash. Las tablas en Lua se consideran como matrices cuando sus índices son numéricos y están empaquetados densamente, sin dejar huecos. Los índices en la siguiente tabla serían 1, 2, 3, 4
.
local t = {''a'', ''b'', ''c'', ''d''}
Cuando tiene una tabla similar a una matriz, puede verificar si contiene un cierto valor al recorrer la tabla. Puede usar un ciclo for..in
, y la función ipairs
para crear una función genérica.
local function has_value (tab, val)
for index, value in ipairs(tab) do
if value == val then
return true
end
end
return false
end
Podemos usar lo anterior en una condición condicional para obtener nuestro resultado.
if has_value(arr, ''b'') then
print ''Yep''
else
print ''Nope''
end
Para reiterar mi comentario anterior, su código de ejemplo actual no es una tabla de números similar a una matriz. En su lugar, es una tabla similar a una matriz que contiene tablas tipo matriz, que tienen números en cada uno de sus primeros índices. Debería modificar la función anterior para que funcione con el código que se muestra, lo que lo hace menos genérico.
local function has_value (tab, val)
for index, value in ipairs(tab) do
-- We grab the first index of our sub-table instead
if value[1] == val then
return true
end
end
return false
end
Lua no es un lenguaje muy grande o complejo, y su sintaxis es muy clara. Si los conceptos anteriores son totalmente ajenos a ti, necesitarás pasar un tiempo leyendo literatura real, no solo copiando ejemplos. Aconsejaría leer Programación en Lua para asegurarte de que entiendes los conceptos básicos. Esta es la primera edición, dirigida a Lua 5.1.