web-dev-qa-db-ja.com

キーでluaテーブルエントリを削除する方法

ハッシュマップとして使用するluaテーブルがあります。つまり、文字列キーを使用します。

_local map = { foo = 1, bar = 2 }
_

キーで識別されるこのテーブルの要素を「ポップ」したいと思います。 table.remove()メソッドがありますが、削除する要素のインデックス(つまり数値)のみを受け取り、汎用キーは受け取りません。 table.remove(map, 'foo')を実行できるようにしたいのですが、ここに実装方法を示します。

_function table.removekey(table, key)
    local element = table[key]
    table[key] = nil
    return element
end
_

それを行うより良い方法はありますか?

83
Wookai

いいえ、キーの値をnilに設定することは、テーブルのハッシュマップ部分のアイテムを削除する方法として受け入れられています。あなたがしていることは標準です。ただし、table.remove()をオーバーライドしないことをお勧めします。テーブルの配列部分については、デフォルトのtable.remove()機能にインデックスの番号付けの変更が含まれますが、オーバーライドは行いません。関数をtable関数セットに追加する場合は、おそらくtable.removekey()などの名前を付けます。

73
Amber