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

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

原文链接 https://stackoverflow.com/questions/5178087

点赞
stackoverflow用户513763
stackoverflow用户513763

如果您的表是一个数组(只有大于0的数字索引),那么请使用table.sort并使用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])
2011-03-03 08:19:19
stackoverflow用户642914
stackoverflow用户642914
`math.max(unpack({1, 2, 3, 4, 5}))`

将数组 {1, 2, 3, 4, 5} 作为参数传递给 unpack 函数并返回其元素,然后再传递给 math.max 函数并返回数组中的最大值。

2011-03-03 11:54:47
stackoverflow用户206020
stackoverflow用户206020

一个通用的实现方式:

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

使用方法如下:

print(max({1,2,3,4,1,2,37,1,0}, function(a,b) return a < b end)) --> 7 37
2011-03-03 12:17:20
stackoverflow用户282536
stackoverflow用户282536

Lua自带一个函数用于获取最高的整数键,如果这就是你想要的...

table.maxn
2011-03-07 07:49:51
stackoverflow用户2335481
stackoverflow用户2335481

``` loltable = {1, 2, 3, 4, 1, 2, 37, 1, 0} table.sort(loltable) print(loltable[#loltable])

loltable 为一个包含了数字元素的表。对它进行了排序之后,通过 print 函数输出了排序后表的最后一个元素,即最大值。

2013-04-30 10:28:06
stackoverflow用户731940
stackoverflow用户731940

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

function max(a)
  local values = {}

  for k,v in pairs(a) do
    values[#values+1] = v
  end
  table.sort(values) -- 从最小到最大自动排序

  return values[#values]
end

print(max({1, 2, 3, 4, 1, 2, 37, 1, 0})) --> 37

如果想进一步仅包含表格的数组部分,并筛选出仅为数字值的元素(以防止错误),则可以添加一些类型检查:

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) -- 从最小到最大自动排序

  return values[#values]
end

print(max({1, 2, 3, 4, 1, 2, 37, 1, 0})) --> 37

逻辑如下:

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

我知道这是一个老问题,所以问题提出者可能不再需要了,但此页面目前在谷歌上排名靠前,希望这可以帮助其他出现在这个页面上的人。

2015-07-16 19:44:57
stackoverflow用户16816224
stackoverflow用户16816224

你忘记在解包前添加table像这样:

 local save = math.max(table.unpack({1, 2, 3, 4, 5}))
    print(save)

如果你想要找到最大或最小的数字,这应该可以工作。

2022-02-18 09:42:38