tutorial programacion lenguaje guia español comandos basico aprender lua integer lua-table

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:

  1. Crear una tabla vacía (matriz)
  2. Iterar todas las teclas a través de pares (ipairs () se detiene al primer nulo, y lo mismo ocurre con un ciclo for con #)
  3. Agregue cada valor a la matriz (después de verificar el tipo en el segundo bloque de código)
  4. Ordenar la matriz de mayor a menor
  5. 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.