8

Luaのテーブルで最大の整数を取得するにはどうすればよいですか?

4

7 に答える 7

21
math.max(unpack({1, 2, 3, 4, 5}))
于 2011-03-03T11:54:47.370 に答える
8
loltable = {1, 2, 3, 4, 1, 2, 37, 1, 0}
table.sort(loltable)
print(loltable[#loltable])
于 2013-04-30T10:28:06.380 に答える
5

これを達成するための一般的な関数:

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
于 2011-03-03T12:17:20.663 に答える
4

ポンザオによる他の回答は良いですが、あなたの質問にもっと具体的に答えるために、最高の数を取得したいだけの場合(インデックスも取得したくない場合)、私は通常これを行います:

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

ロジックは次のとおりです。

  1. 空のテーブル (配列) を作成する
  2. ペアを介してすべてのキーを反復します (ipairs() は最初の nil で停止し、# を使用した for ループも同様です)
  3. 各値を配列に追加します (2 番目のコード ブロックで型を確認した後)
  4. 配列を最高から最低に並べ替える
  5. 最後の要素の値を返します (ソート後、最後になります)。

これは古い質問であることはわかっているので、OP はおそらくもうこれを必要としませんが、このページは現在 Google で上位にランクされているため、このページに出くわした他の誰かに役立つことを願っています.

于 2015-07-16T19:44:57.010 に答える
1

テーブルが配列の場合 (数値インデックスのみ >0)、table.sort と take を使用します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])
于 2011-03-03T08:19:19.893 に答える
1

Lua には、必要に応じて最大の整数キーを取得する関数が付属しています...

table.maxn
于 2011-03-07T07:49:51.100 に答える