假设我有一张桌子:
0.8
0.7
0.9
0.5
我想得到 2 最大值的索引,所以在这种情况下,它应该返回:
3 1
我是Lua的新手,所以任何帮助都非常受欢迎。
非常感谢,
答案 0 :(得分:3)
您可以使用for
循环(for i = 1, #tbl
或for i, val in ipairs(tbl)
)循环遍历表,并跟踪最大和第二大元素(您需要存储第一个索引和第一个值和第二个索引,第二个值检查值并保存索引)。循环完成后,您将获得第一个和第二个最大元素的索引。请记住,当第一个值更新时,可能需要根据第二个值检查其旧值。
另一种选择是构建索引数组并根据值对其进行排序(因为sort
可以采用可选的比较器函数):
local function indexsort(tbl)
local idx = {}
for i = 1, #tbl do idx[i] = i end -- build a table of indexes
-- sort the indexes, but use the values as the sorting criteria
table.sort(idx, function(a, b) return tbl[a] > tbl[b] end)
-- return the sorted indexes
return (table.unpack or unpack)(idx)
end
local tbl = {0.8, 0.7, 0.9, 0.5}
print(indexsort(tbl))
这会打印3 1 2 4
。如果您只需要前两个索引,则可以执行local first, second = indexsort(tbl)
。请注意indexsort
返回所有索引,因此如果您只需要前两个(并且您的表很大),您可能希望更新该函数以仅返回前两个项而不是整个表。