Lua テーブルが空 (エントリがない) かどうかを判断する最も効率的な方法は? 質問する

Lua テーブルが空 (エントリがない) かどうかを判断する最も効率的な方法は? 質問する

テーブルが空かどうか (つまり、現在配列形式の値も辞書形式の値も含まれていないかどうか) を判断する最も効率的な方法は何ですか?

現在、私は以下を使用していますnext():

if not next(myTable) then
    -- Table is empty
end

もっと効率的な方法はありますか?

注:#演算子は、テーブル内の配列形式の値に対してのみ機能するため、ここでは十分ではありません。したがって、両方とも 0 を返すため#{test=2}、 と区別できません。#{}また、テーブル変数が であるかどうかを確認するだけでは不十分であることにも注意してください。これは、nil 値ではなく、エントリが 0 のテーブル (つまり)nilを探しているためです。{}

ベストアンサー1

あなたのコードは効率的ですが間違っています。(考慮してください{[false]=0}。)正しいコードは次のとおりです。

if next(myTable) == nil then
   -- myTable is empty
end

next効率を最大限に高めるには、ローカル変数にバインドする必要があります。例:

...
local next = next 
...
... if next(...) ...

(nextがローカルの場合、コードはnext「上位値」の配列への定数時間のインデックス操作によってプリミティブ関数を検索します。がnextグローバルのままの場合、検索には、nextグローバル変数の値を含む「環境」ハッシュ テーブルのインデックス作成が含まれます。このインデックス作成操作は定数時間ですが、ローカル変数の配列検索よりも大幅に遅くなります。)

おすすめ記事