问题
How do I get the highest integer in a table in Lua?
回答1:
math.max(unpack({1, 2, 3, 4, 5}))
回答2:
A generic function for achieving this:
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
Which is used like this:
print(max({1,2,3,4,1,2,37,1,0}, function(a,b) return a < b end)) --> 7 37
回答3:
loltable = {1, 2, 3, 4, 1, 2, 37, 1, 0}
table.sort(loltable)
print(loltable[#loltable])
回答4:
The other answer by ponzao is good, but to answer your question more specifically, if you just want to get the highest number (and not the index as well), I usually do this:
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
To take it a step further and include only the array part of the table and filter out for only number values (to prevent errors), you can add some type checks:
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
The logic is as follows:
- Create an empty table (array)
- Iterate over all keys via pairs (ipairs() stops at first nil, and so does using a for loop with #)
- Add each value to the array (after verifying type in second code block)
- Sort the array from highest to lowest
- Return the value of the last element (after sort, it will be at the end).
I know this is an old question so the OP probably doesn't need this anymore, but this page currently ranks high on Google so hopefully this can help someone else who stumbles upon this page.
回答5:
If your table is an array (only numeric indices >0) then use table.sort and take t[#t]
(however, this changes the table).
Other approach would be like this
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])
回答6:
Lua comes with a function to get the highest integer key if thats what you wanted...
table.maxn
来源:https://stackoverflow.com/questions/5178087/how-do-i-get-the-highest-integer-in-a-table-in-lua