2012-11-20 11 views
13

Firebaseで順序付きリストを維持したい場合は、リスト内の各項目に手動で優先順位を手動で割り当てるのが最善の方法です。つまり、リストから項目を挿入または削除すると、それに続くすべての項目の優先順位を更新する必要があります。リストの先頭にある項目の場合、これはリスト内のすべての項目を更新することを意味します。この場合に使用するデータ構造やアルゴリズムの方が優れていますか?Firebaseでの順序付きリストの実行

+0

私はこれを編集してより良いd.s。またはアルゴリズム - 唯一の公正な答えは「これは十分に速いのですか?あなたはそれをプロファイルしましたか? " – djechlin

+0

ソートのアルゴリズムとは何ですか?アルファベット順ですか?数値?タイムスタンプで?私はFirebaseについてのこのような不思議な疑問について熟考していますが、通常、希望する動作を慎重に特定したら、それらを解決するのがずっと簡単です。 – Kato

答えて

4

要素の優先度を適切に設定することで、順序付きリストを作成できます。リスト内の項目は、優先順に並び替えて並べ替えられています。また、優先度が数値で解析できる場合は、数値で並べ替えられます。

既存のリストの中央にアイテムを挿入する場合、既存のアイテムの優先順位を変更すると効果はありますが、ひどく非効率です。より良いアプローチは、値を挿入して新しい項目にその優先順位を設定する2つの項目間の優先順位を選択することです。

たとえば、優先度 "a"(または "aq"、 "az")の2つの要素の間に優先度 "a"の要素2と優先度 "b"の要素2を挿入できます。等)。

ほとんどの場合、順序付きリストを作成するときに、あらかじめアイテムを挿入するリスト内の位置を必ずしも知る必要はありません。たとえば、ゲームのリーダーボードを作成している場合、新しいスコアをリストの3番目に配置することをあらかじめ知っているのではなく、10000というスコアが得られた位置に挿入することを知っています(これは3番目に起こる可能性があります)。この場合、優先度をスコアに設定するだけでこれが達成されます。ここのリーダーボードの例をご覧ください: https://www.firebase.com/tutorial/#example-leaderboard

+3

すぐに応答してくれてありがとう。この場合、ドラッグアンドドロップのリストを作成したいので、順序はユーザーによって定義されます。私は2つの必要な項目の間に優先順位を挿入する考えが好きですが、私は1つのことに固執しています: 'child_added'コールバックを使用しているときに次の項目がどういうことを知っていますか?後のアイテムではなく、前のアイテムだけを取得します。 –

+1

任意順序リスト@RadfordSmithの良い解決法を見つけましたか? –

0

Ruby gem ranked_modelには、この問題の興味深いアプローチがあります。これは他の多くの "行為と同様の"実装のように位置整数を使用しますが、各位置移動ですべての整数を書き直すことには依存しません。代わりに、整数は大きく離れているため、各更新は1行または2行にしか影響しません。このアプローチがここに収まるかどうかを調べるためのreadmeとコードを調べる価値があります。