How do I get the highest integer in a table in Lua?

我的梦境 提交于 2019-12-10 08:50:32

问题


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:

  1. Create an empty table (array)
  2. Iterate over all keys via pairs (ipairs() stops at first nil, and so does using a for loop with #)
  3. Add each value to the array (after verifying type in second code block)
  4. Sort the array from highest to lowest
  5. 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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!