如何获得 Lua 表中的最大整数?
问问题
30931 次
7 回答
21
math.max(unpack({1, 2, 3, 4, 5}))
于 2011-03-03T11:54:47.370 回答
8
loltable = {1, 2, 3, 4, 1, 2, 37, 1, 0}
table.sort(loltable)
print(loltable[#loltable])
于 2013-04-30T10:28:06.380 回答
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
这是这样使用的:
print(max({1,2,3,4,1,2,37,1,0}, function(a,b) return a < b end)) --> 7 37
于 2011-03-03T12:17:20.663 回答
4
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
为了更进一步,只包括表格的数组部分并只过滤掉数字值(以防止错误),您可以添加一些类型检查:
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
逻辑如下:
- 创建一个空表(数组)
- 通过对遍历所有键(ipairs() 在第一个 nil 处停止,使用带有 # 的 for 循环也是如此)
- 将每个值添加到数组中(在第二个代码块中验证类型之后)
- 将数组从高到低排序
- 返回最后一个元素的值(排序后,它将在末尾)。
我知道这是一个老问题,所以 OP 可能不再需要这个,但是这个页面目前在谷歌上排名很高,所以希望这可以帮助其他偶然发现这个页面的人。
于 2015-07-16T19:44:57.010 回答
1
如果你的表是一个数组(只有数字索引>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])
于 2011-03-03T08:19:19.893 回答
1
如果这就是你想要的,Lua 带有一个函数来获取最高整数键......
table.maxn
于 2011-03-07T07:49:51.100 回答
1
你忘记在像这样解压之前添加表格
local save = math.max(table.unpack({1, 2, 3, 4, 5}))
print(save)
如果您想找到最大或最小数字,这应该可以
于 2022-02-18T09:42:38.660 回答