如何在Lua中获得表中的最高整数?
如何在Lua中获取表中的最高整数?如果表是数组(仅数值索引>0),则使用table.sort并获取如何在Lua中获得表中的最高整数?,lua,integer,lua-table,Lua,Integer,Lua Table,如何在Lua中获取表中的最高整数?如果表是数组(仅数值索引>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]) m={0,0} 对于k,v成对(t)do 如果m[1]是实现
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])
m={0,0}
对于k,v成对(t)do
如果m[1]是实现这一点的通用函数:
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
print(max({1,2,3,4,1,2,37,1,0},函数(a,b)返回a7 37
Lua附带了一个函数,如果您需要的话,它可以获取最高的整数键
table.maxn
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可能不再需要这个了,但这个页面目前在谷歌排名很高,希望这能帮助其他偶然发现这个页面的人。这对较大的表不起作用,因为每个Lua实现中的参数数量和返回值数量都有限制。math.max()中是否允许特定数量的参数?这似乎是最“正式”的方式。Lua表索引从1开始。这是正确的,同时也是错误的。如果您执行t={“a”}
,那么t[1]实际上就是“a”。但是,只要记住其他索引最终将位于表的哈希部分,就可以在任何地方开始索引。因此,t={[0]=0,1,2,3}
甚至`t={[-123]=“a”、[-122]=“b”、'c'}都同样有效。但是在这些表上,table.sort函数不起作用,因为这只适用于索引大于0且没有孔的数组。它不应该是:。.m[1])
?对,这可能也是Alexander的目标。。。修正@jpjacobs,反对m[0]
的原因是初始值设定项m={0,0}
初始化了m[1]
和m[2]
,但不是m[0]
。这将导致第三行的compare抱怨comparing和integer与nil
。从Lua 5.2开始,为什么函数名为“max”,它不应该是“compare”或其他什么?该函数返回数组中的最大值(及其键),因此将其称为“max”比“compare”更有意义。非常简单,并且完全符合要求。
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