Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Lua中获得表中的最高整数?_Lua_Integer_Lua Table - Fatal编程技术网

如何在Lua中获得表中的最高整数?

如何在Lua中获得表中的最高整数?,lua,integer,lua-table,Lua,Integer,Lua Table,如何在Lua中获取表中的最高整数?如果表是数组(仅数值索引>0),则使用table.sort并获取t[#t](但是,这会更改表) 另一种方法是这样的 m={0,0} for k,v in pairs(t) do if m[1]<v then m[1]=v m[2]=k end end print("Maximum of "..m[1].." at index "..m[2]) m={0,0} 对于k,v成对(t)do 如果m[1]是实现

如何在Lua中获取表中的最高整数?

如果表是数组(仅数值索引>0),则使用table.sort并获取
t[#t]
(但是,这会更改表)

另一种方法是这样的

m={0,0}
for k,v in pairs(t) do
    if m[1]<v then
         m[1]=v
         m[2]=k
    end
end
print("Maximum of "..m[1].." at index "..m[2])
m={0,0}
对于k,v成对(t)do

如果m[1]是实现这一点的通用函数:

function max(t, fn)
    if #t == 0 then return nil, nil end
    local key, value = 1, t[1]
    for i = 2, #t do
        if fn(value, t[i]) then
            key, value = i, t[i]
        end
    end
    return key, value
end
它是这样使用的:

print(max({1,2,3,4,1,2,37,1,0}, function(a,b) return a < b end)) --> 7 37
print(max({1,2,3,4,1,2,37,1,0},函数(a,b)返回a7 37

Lua附带了一个函数,如果您需要的话,它可以获取最高的整数键

table.maxn

ponzao的另一个答案很好,但为了更具体地回答您的问题,如果您只想获得最高的数字(而不是索引),我通常会这样做:

function max(a)
  local values = {}

  for k,v in pairs(a) do
    values[#values+1] = v
  end
  table.sort(values) -- automatically sorts lowest to highest

  return values[#values]
end

print(max({1, 2, 3, 4, 1, 2, 37, 1, 0})) --> 37
要更进一步,仅包括表的数组部分,并仅过滤出数值(以防止错误),可以添加一些类型检查:

function max(a)
  local values = {}

  for k,v in pairs(a) do
    if type(k) == "number" and type(v) == "number" then
      values[#values+1] = v
    end
  end
  table.sort(values) -- automatically sorts lowest to highest

  return values[#values]
end

print(max({1, 2, 3, 4, 1, 2, 37, 1, 0})) --> 37
逻辑如下:

  • 创建空表(数组)
  • 通过对迭代所有键(ipairs()在第一个nil处停止,使用带有#的for循环也会停止)
  • 将每个值添加到数组中(在验证第二个代码块中的类型后)
  • 将数组从最高到最低排序
  • 返回最后一个元素的值(排序后,它将位于末尾)

  • 我知道这是一个老问题,所以OP可能不再需要这个了,但这个页面目前在谷歌排名很高,希望这能帮助其他偶然发现这个页面的人。

    这对较大的表不起作用,因为每个Lua实现中的参数数量和返回值数量都有限制。math.max()中是否允许特定数量的参数?这似乎是最“正式”的方式。Lua表索引从1开始。这是正确的,同时也是错误的。如果您执行
    t={“a”}
    ,那么t[1]实际上就是“a”。但是,只要记住其他索引最终将位于表的哈希部分,就可以在任何地方开始索引。因此,
    t={[0]=0,1,2,3}
    甚至`t={[-123]=“a”、[-122]=“b”、'c'}都同样有效。但是在这些表上,table.sort函数不起作用,因为这只适用于索引大于0且没有孔的数组。它不应该是:
    。.m[1])
    ?对,这可能也是Alexander的目标。。。修正@jpjacobs,反对
    m[0]
    的原因是初始值设定项
    m={0,0}
    初始化了
    m[1]
    m[2]
    ,但不是
    m[0]
    。这将导致第三行的compare抱怨comparing和integer与
    nil
    。从Lua 5.2开始,为什么函数名为“max”,它不应该是“compare”或其他什么?该函数返回数组中的最大值(及其键),因此将其称为“max”比“compare”更有意义。非常简单,并且完全符合要求。
    function max(a)
      local values = {}
    
      for k,v in pairs(a) do
        values[#values+1] = v
      end
      table.sort(values) -- automatically sorts lowest to highest
    
      return values[#values]
    end
    
    print(max({1, 2, 3, 4, 1, 2, 37, 1, 0})) --> 37
    
    function max(a)
      local values = {}
    
      for k,v in pairs(a) do
        if type(k) == "number" and type(v) == "number" then
          values[#values+1] = v
        end
      end
      table.sort(values) -- automatically sorts lowest to highest
    
      return values[#values]
    end
    
    print(max({1, 2, 3, 4, 1, 2, 37, 1, 0})) --> 37