如何在Lua中获取表中的最高整数?
math.max(unpack({1, 2, 3, 4, 5}))
这受限于Lua栈的大小;在PUC Lua 5.1上,如果栈是空闲的(即尚未进行函数调用),则最多可获取约8千个数字的最大值。
自Lua 5.2以来,您必须使用table.unpack
而不是unpack
(它已被移动)。栈大小已经大幅增加,因此可以使用此方法找到数十万个数字的最大值。
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
loltable = {1, 2, 3, 4, 1, 2, 37, 1, 0}
table.sort(loltable)
print(loltable[#loltable])
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
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])
t={"a"}
,那么t[1]
确实是"a"。但是你可以从任何位置开始索引,只要记住其他索引最终会出现在表的哈希部分中。所以t={[0]=0,1,2,3}
或者甚至是t={[-123]="a",[-122]="b",'c'}
同样有效。但是对于这些表,table.sort
函数将无法工作,因为它仅适用于索引>0且没有空洞的数组。 - jpjacobs.." at index " ..m[1])
吗? - quinmarsm[0]
的反感是由于初始化程序m={0,0}
导致的,该初始化程序已经初始化了m[1]
和m[2]
,但是没有初始化m[0]
。这将导致第三行的比较抱怨用nil
来比较整数。 - RBerteigtable.maxn
local save = math.max(table.unpack({1, 2, 3, 4, 5}))
print(save)
如果你想查找最大或最小数,这段代码应该能够正常工作。