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

假设我有一个表格:

0.8
0.7
0.9
0.5

我想要获取最大值的索引,我应该使用以下代码:

3 1

我很新手,所以任何帮助都将受到欢迎。

非常谢谢。

点赞
用户1442917
用户1442917

你可以使用 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 -- 构建一个索引表
  -- 排序索引,但将值用作排序标准
  table.sort(idx, function(a, b) return tbl[a] > tbl[b] end)
  -- 返回排序后的索引
  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返回所有索引,因此如果你只需要前两个(且你的表格很大),你可能需要更新函数以仅返回前两个项目而不是整个表格。

2016-05-18 16:20:54