从Lua中的表中获取最大值的索引

时间:2016-05-18 14:21:53

标签: lua

假设我有一张桌子:

0.8
0.7
0.9
0.5

我想得到 2 最大值的索引,所以在这种情况下,它应该返回:

3 1

我是Lua的新手,所以任何帮助都非常受欢迎。

非常感谢,

1 个答案:

答案 0 :(得分:3)

您可以使用for循环(for i = 1, #tblfor 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返回所有索引,因此如果您只需要前两个(并且您的表很大),您可能希望更新该函数以仅返回前两个项而不是整个表。