programacion - ¿Cómo obtengo el número entero más alto en una tabla en Lua?
lua guia español (6)
Una función genérica para lograr esto:
function max(t, fn)
if #t == 0 then return nil, nil end
local key, value = 1, t[1]
for i = 2, #t do
if fn(value, t[i]) then
key, value = i, t[i]
end
end
return key, value
end
Que se usa así:
print(max({1,2,3,4,1,2,37,1,0}, function(a,b) return a < b end)) --> 7 37
¿Cómo obtengo el número entero más alto en una tabla en Lua?
math.max(unpack({1, 2, 3, 4, 5}))
Si su tabla es una matriz (solo índices numéricos> 0), utilice table.sort y tome t[#t]
(sin embargo, esto cambia la tabla).
Otro enfoque sería como esto
m={0,0}
for k,v in pairs(t) do
if m[1]<v then
m[1]=v
m[2]=k
end
end
print("Maximum of "..m[1].." at index "..m[2])
Lua viene con una función para obtener la clave entera más alta, si eso es lo que quieres ...
table.maxn
loltable = {1, 2, 3, 4, 1, 2, 37, 1, 0}
table.sort(loltable)
print(loltable[#loltable])
La otra respuesta de ponzao es buena, pero para responder a su pregunta más específicamente, si solo quiere obtener el número más alto (y no el índice también), generalmente hago esto:
function max(a)
local values = {}
for k,v in pairs(a) do
values[#values+1] = v
end
table.sort(values) -- automatically sorts lowest to highest
return values[#values]
end
print(max({1, 2, 3, 4, 1, 2, 37, 1, 0})) --> 37
Para ir un paso más allá e incluir solo la parte de la matriz de la tabla y filtrar solo los valores numéricos (para evitar errores), puede agregar algunas comprobaciones de tipo:
function max(a)
local values = {}
for k,v in pairs(a) do
if type(k) == "number" and type(v) == "number" then
values[#values+1] = v
end
end
table.sort(values) -- automatically sorts lowest to highest
return values[#values]
end
print(max({1, 2, 3, 4, 1, 2, 37, 1, 0})) --> 37
La logica es como sigue:
- Crear una tabla vacía (matriz)
- Iterar todas las teclas a través de pares (ipairs () se detiene al primer nulo, y lo mismo ocurre con un ciclo for con #)
- Agregue cada valor a la matriz (después de verificar el tipo en el segundo bloque de código)
- Ordenar la matriz de mayor a menor
- Devuelve el valor del último elemento (después de ordenar, estará al final).
Sé que esta es una pregunta antigua, por lo que es probable que el OP ya no necesite esto, pero esta página actualmente ocupa un lugar destacado en Google, así que con suerte esto puede ayudar a alguien más que tropieza con esta página.