【问题标题】:Returning key of maximum or minimum number in a table返回表中最大或最小数字的键
【发布时间】:2013-12-30 03:23:47
【问题描述】:

这里有一个简单的 Lua 问题:如何找到给定表中最小或最大数字的索引或键。

math.max/math.min 只给出实际的最大或最小数字,而不是密钥。

【问题讨论】:

    标签: lua lua-table


    【解决方案1】:

    迭代表,并将值与存储的最大值/最小值进行比较。以获取最大值为例(假设表是一个序列,即类数组:

    local t = {1, 3, 7, 6, 4, 0}
    
    local key, max = 1, t[1]
    for k, v in ipairs(t) do
        if t[k] > max then
            key, max = k, v
        end
    end
    
    print(key, max)
    

    输出:

    3       7
    

    如果表格不是序列,稍微改进一下就可以了:

    local t = {four = 4, three = 3, seven = 7, six = 6, one = 1, zero = 0}
    
    local key = next(t)
    local max = t[key]
    
    for k, v in pairs(t) do
        if t[k] > max then
            key, max = k, v
        end
    end
    
    print(key, max)
    

    在实际代码中,记得先检查表是否为空。

    【讨论】:

    • 为什么是t[k] 而不仅仅是v
    【解决方案2】:
    function maxkey(initialtable)
     local maxval = math.max(unpack(initialtable))
     local inv={}
     for k,v in pairs(initialtable) do
       inv[v]=k
     end
     return inv[maxval]
    end
    

    查看这些 SO 问题:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-12
      • 2011-11-15
      • 2019-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      相关资源
      最近更新 更多