【问题标题】:Get index of maximum values from table in Lua从 Lua 中的表中获取最大值的索引
【发布时间】:2016-05-20 01:27:02
【问题描述】:

假设我有一张桌子:

0.8
0.7
0.9
0.5

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

3 1

我是 Lua 的新手,因此非常欢迎任何帮助。

非常感谢,

【问题讨论】:

  • 您的问题应该表明自己为解决问题所做的一些努力。
  • 您没有显示表中的键(索引)。如果您只关心正整数键并且它们都是连续的(最后一个之前没有 nil 值),那么您可以使用仅适用于“表序列”的表技术,例如 #

标签: lua


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-07-18
    • 2021-03-11
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 2019-08-14
    • 2022-01-05
    • 2014-07-09
    • 1970-01-01
    相关资源
    最近更新 更多