【发布时间】:2011-07-07 21:04:12
【问题描述】:
如何在 Lua 中获取表中的最大整数?
【问题讨论】:
如何在 Lua 中获取表中的最大整数?
【问题讨论】:
math.max(unpack({1, 2, 3, 4, 5}))
【讨论】:
loltable = {1, 2, 3, 4, 1, 2, 37, 1, 0}
table.sort(loltable)
print(loltable[#loltable])
【讨论】:
实现此目的的通用函数:
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
【讨论】:
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
逻辑如下:
我知道这是一个老问题,所以 OP 可能不再需要这个了,但是这个页面目前在 Google 上的排名很高,所以希望这可以帮助其他偶然发现这个页面的人。
【讨论】:
如果您的表是一个数组(只有数字索引 >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])
【讨论】:
t={"a"},那么 t[1] 确实是“a”。但是你可以在任何你想要的地方开始索引,只要你记住其他索引最终会出现在表的散列部分。所以t={[0]=0,1,2,3} 甚至 `t={[-123]="a",[-122]="b",'c'} 都同样有效。但是在这些表上 table.sort 函数将不起作用,因为这仅适用于索引> 0且没有孔的数组。
.." at index " ..m[1])?
m[0] 是由于初始化器m={0,0} 初始化了m[1] 和m[2] 但不是 m[0]。这将导致第三行的比较抱怨与nil 比较和整数。
Lua 自带一个函数来获取最大整数键,如果那是你想要的...
table.maxn
【讨论】:
table.maxn is deprecated 从 Lua 5.2 开始。
你忘记在像这样解压之前添加表格
local save = math.max(table.unpack({1, 2, 3, 4, 5}))
print(save)
如果您想找到最大或最小数字,这应该可以工作
【讨论】: