2017-02-28 4 views
2

ルアで双方向マップを作成するにはどうしますか?私はLuaを初めて使用しています。私が考えることができる唯一の方法は、すべてのキーと値のペアをテーブルに入れ、各ペアを反復して元のテーブルに追加します(キーと値を入れ替えます)。ルアの双方向マップ

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

+0

なぜこれを行う必要がありますか?他にも、メタテーブルを持つテーブルに2つのテーブル(左と右)をカプセル化し、その2つのテーブルの一貫性を保証するメソッドを提供するなどの方法があります。または、右側に高速検索が必要ない場合は1つのテーブルを使用してください。 –

答えて

3

よりよい方法はないと思います(キー/値の競合を処理できると仮定します)。新しい値をテーブルに追加する(または既存の値を更新/削除する)ときに、スワップされた値を格納するのが少し良い方法かもしれませんが、全体的な考え方は同じです。

+3

両方向を同じテーブルに入れるときは、キー/値のペアを追加/削除するときに直ちに反転ペアを更新することをお勧めします。あなたがしていない場合、反転を追加するために 'ペア'で反復すると、物事が壊れます。 (テーブルにエントリを追加すると、リサイズがトリガされる可能性があります。これは、潜在的なストレージのエントリの順序を変更する可能性があります。つまり、 'next' /' pairs'は、 "drunkard's walk"を行い、要素をスキップしたり、あなたがそれを忘れていると、醜いものを見つけることができます。) – nobody