3

ほとんどの言語は、等価関係とハッシュ関数 (ハッシュ テーブルを使用) または順序関係 (ツリーを使用) を使用して、任意のタイプのキーに対して効率的にマップを実装する方法を提供します。

ただし、Lua テーブルはこれを文字列に対してのみ提供しているようです。具体的には、Lua テーブル (概念的に「オブジェクト」を実装する) をキーとして使用する場合、同じオブジェクトへの参照でのみ再度検索できますが、同じ「内容」を持つ新しいオブジェクトは検索できません。

これは、少なくとも線形時間ルックアップに頼ることなく、データベースのインデックスや「一意の」キーに基づく値のキャッシュに似た動作を実装するために必要です。

私が考えることができる唯一のことは、キー オブジェクトが fields から作成されている場合、f1,...,fnネストされたマップの束を作成して、このように検索できることですT[f1][f2]...[fn](少なくともフィールド自体が整数または文字列の場合)。これはちょっとひどいものでf1,...,fn、「オブジェクト」にカプセル化するという意図を破っています。

他のアイデアはありますか?

4

2 に答える 2

3

あなたが望むものはこのようなものかもしれません。

それ以外の場合、有効なアプローチは、決定論的な方法でキーを文字列にシリアル化し、結果 (またはそのハッシュ) をキーとして使用することです。

SolarBear がコメントで言ったように、メソッドを使用して、通常のテーブルと同じインターフェイスを持たせることができます。

于 2013-08-22T12:27:02.163 に答える