ほとんどの言語は、等価関係とハッシュ関数 (ハッシュ テーブルを使用) または順序関係 (ツリーを使用) を使用して、任意のタイプのキーに対して効率的にマップを実装する方法を提供します。
ただし、Lua テーブルはこれを文字列に対してのみ提供しているようです。具体的には、Lua テーブル (概念的に「オブジェクト」を実装する) をキーとして使用する場合、同じオブジェクトへの参照でのみ再度検索できますが、同じ「内容」を持つ新しいオブジェクトは検索できません。
これは、少なくとも線形時間ルックアップに頼ることなく、データベースのインデックスや「一意の」キーに基づく値のキャッシュに似た動作を実装するために必要です。
私が考えることができる唯一のことは、キー オブジェクトが fields から作成されている場合、f1,...,fn
ネストされたマップの束を作成して、このように検索できることですT[f1][f2]...[fn]
(少なくともフィールド自体が整数または文字列の場合)。これはちょっとひどいものでf1,...,fn
、「オブジェクト」にカプセル化するという意図を破っています。
他のアイデアはありますか?