如何在Lua中获取表中的最高整数?

Jer*_*emy 4 lua integer lua-table

如何在Lua中获取表中的最高整数?

小智 13

math.max(unpack({1, 2, 3, 4, 5}))
Run Code Online (Sandbox Code Playgroud)

  • 这对大型表不起作用,因为每个Lua实现中的参数和返回值的数量都有限制. (4认同)

小智 7

loltable = {1, 2, 3, 4, 1, 2, 37, 1, 0}
table.sort(loltable)
print(loltable[#loltable])
Run Code Online (Sandbox Code Playgroud)


pon*_*zao 5

实现此目的的通用功能:

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
Run Code Online (Sandbox Code Playgroud)

这是这样使用的:

print(max({1,2,3,4,1,2,37,1,0}, function(a,b) return a < b end)) --> 7 37
Run Code Online (Sandbox Code Playgroud)


小智 5

ponzao 的另一个答案很好,但为了更具体地回答你的问题,如果你只想获得最高的数字(而不是索引),我通常这样做:

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
Run Code Online (Sandbox Code Playgroud)

要更进一步并仅包含表的数组部分并仅过滤掉数字值(以防止错误),您可以添加一些类型检查:

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
Run Code Online (Sandbox Code Playgroud)

逻辑如下:

  1. 创建一个空表(数组)
  2. 通过对迭代所有键(ipairs() 在第一个 nil 处停止,使用带有 # 的 for 循环也是如此)
  3. 将每个值添加到数组中(在验证第二个代码块中的类型之后)
  4. 将数组从最高到最低排序
  5. 返回最后一个元素的值(排序后位于末尾)。

我知道这是一个老问题,所以OP可能不再需要这个了,但是这个页面目前在Google上排名很高,所以希望这可以帮助其他偶然发现这个页面的人。


jpj*_*obs 2

如果您的表是一个数组(仅数字索引>0),则使用 table.sort 并 take t[#t](但是,这会更改表)。

其他方法就像这样

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])
Run Code Online (Sandbox Code Playgroud)