2012-04-19 13 views
2

私はアイテムリストを格納するために私のdbにビットマスクを持っています。これまでは、これらのアイテムを画面上で1つずつレンダリングしました。しかし、ユーザーはアイテムの順序を設定できるようになりました。私は嫌いな解決策を持っています:いくつかのセパレータ(これは1?8 | 4 | 16のようなもの)を使ってフィールドにIDリストを格納することです。アイテムのリストを含むビットマスクがある場合のために、アイテムの順序を格納する方法は?

誰かが私に別の解決策を見つけるのを手助けできますか?

+1

あなたは注文を処理できる何かの代わりにあなたのビットマスクソリューションを取り除きたいのですか? –

+0

いくつのアイテムがありますか?番号は固定されていますか? – dasblinkenlight

+0

いいえ、リストを保存するビットマスクが必要です。しかし、ビットマスクを使用して項目の順序を決定することはできません。だから私はアイテムの順序を格納する方法を見つけるが、私のビットマスクを生かし続ける。 – Vitall

答えて

1

アイテムの数が特定の数(たとえば15)に制限されている場合は、小さな数値のリストを大きな数値タイプに格納できます。基本的に、リストは4ビットグループの「マスク」になります。各グループは0〜15の数値を表します。 15個のアイテムでは、そのようなリストを格納するのに60ビットが必要です。好都合なことに、ほとんどのデータベースは64ビット整数型をサポートしているので、パッキングアルゴリズムを実装するだけです。アイテムの数が15であり、4ビットに格納できる状態の数が16であるため、すべてのゼロを組み合わせて「存在しない」ことを意味することができます。すべての非ゼロの組み合わせは、項目の番号を表します。

文字列に数値のリストを格納するよりもはるかに高速で、コンパクトです。ただし、ビットグループ(この場合は4)の長さは、格納するアイテムの数によって異なるため、展開するのは難しいです。

+0

素晴らしいアイデア!!!ありがとう。 – Vitall

関連する問題