1. ホーム
  2. lua

[解決済み] Luaのテーブルが空かどうかを判断する最も効率的な方法は?

2022-02-19 15:12:16

質問

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

現在、私は next() :

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

もっと効率的な方法はないのでしょうか?

# 演算子はテーブルの配列形式の値に対してのみ作用するので、ここでは十分ではありません。 #{test=2} とは区別がつきません。 #{} どちらも0を返すからです。また、テーブル変数が nil というのも、私が探しているのは nil 値ではなく、0 のエントリを持つテーブル (すなわち {} ).

解決するには?

あなたのコードは効率的ですが、間違っています。 (検討 {[false]=0} .) 正しいコードは

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

最大限の効率を得るために next をローカル変数に変換する、など。

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

(いつ next がローカルな場合、コードはプリミティブ関数 next の配列への定時インデキシング操作によって行われます。 next がグローバルなままだと next は、グローバル変数の値を含むハッシュテーブルをインデックスする必要があります。 このインデックス付けの操作はまだ一定時間ですが、ローカル変数の配列検索に比べるとかなり遅くなります)。