如果我想在Firebase中維護有序列表,似乎最好的方法是手動爲列表中的每個項目分配優先級。這意味着如果我從列表中插入或刪除一個項目,我必須更新它後面的所有項目的優先級。對於列表開頭的項目,這意味着更新列表中的每個項目。在這種情況下是否有更好的執行數據結構或算法?Firebase中有序列表的性能
回答
您可以通過適當設置元素的優先級來創建一個有序列表。列表中的項目按照優先級順序排列,或者如果優先級可以通過數字值解析爲數字。
如果您想要將項目插入現有列表的中間,那麼修改現有項目的優先級就可以工作,但效率會非常低。更好的方法是在要插入值的兩個項目之間選擇優先級,併爲新項目設置優先級。例如,如果元素1的優先級爲「a」,元素2的優先級爲「b」,則可以在優先級爲「aa」(或「aq」,「az」的元素2之間插入元素3,等等)。
根據我們的經驗,大多數時候當您創建一個有序列表時,您並不一定知道列表中您想要事先插入該項目的位置。例如,如果您正在創建一個遊戲的排行榜,您不會事先知道您想在列表中放置一個新的第3個分數,而是您知道您想將它插入任何位置得分10000得到您(這可能是第三次)。在這種情況下,只需將分數設置爲優先就可以實現這一點。在這裏看到我們的領導委員會的例子: https://www.firebase.com/tutorial/#example-leaderboard
感謝您的回覆如此之快。在這種情況下,我想創建一個拖放列表,所以排序由用戶定義。我喜歡在兩個期望項目之間插入優先級的想法,但是我陷入了一件事情:當你使用'child_added'回調時,你怎麼知道下一個項目是什麼?你只能得到以前的項目,而不是之後的項目。 –
您是否曾經爲任意順序列表找到好的解決方案@RadfordSmith? –
Ruby寶石ranked_model有一個有趣的方法來解決這個問題。它使用像許多其他「充當列表」實現的位置整數,但不依賴於在每個位置移動時重寫所有整數。相反,它將整數分隔得很遠,因此每個更新只能影響一行或兩行。可能值得瀏覽自述文件和代碼,看看這種方法是否適合這裏。
- 1. Firebase中布爾數據列表的性能問題
- 2. Firebase沒有要在類中找到的序列化屬性
- 3. 獲取Firebase中有序列表中對象的索引
- 4. Firebase隊列延遲 - 性能問題
- 5. 帶有序列的SQL(plus)性能
- 6. 有序列表中的無序列表
- 7. 保持一個有性能的排序列表
- 8. 我不能檢索消耗性列表視圖中的Firebase數據
- 9. CABasicAnimation性能列表
- 10. 將列表拆分爲兩個列表的所有可能性
- 11. 從Firebase中恢復列表
- 12. Firebase Android離線性能
- 13. 主鍵中列的順序,性能
- 14. Java 8中的序列化lambda表達式的性能
- 15. 列表的有序列表
- 16. Tensorflow中具有長序列的RNN的性能
- 17. 表中的SQL SUM多列 - 性能
- 18. 提高表中隱藏列的性能
- 19. 性能 - 列表框中的Silverlight ContextMenuService
- 20. 在WP7中的列表框性能
- 21. Firebase的FacebookAuthProvider.addScope有何功能?
- 22. 在列表中添加所有可能性,有兩個變量
- 23. firebase數據列表
- 24. 是postgresql序列中的空洞/間隙對性能有害?
- 25. Firebase:防止所有但.push到列表
- 26. 使用身份列或本地序列表的性能影響
- 27. Python的defaultdict(列表)de /序列化性能
- 28. 帶有列表(T)屬性的類中具有列表(T)屬性的類
- 29. 在Android的Firebase onClick列表
- 30. 在MySQL中只有一列索引表的性能
我編輯這個要求更好的ds.s.或算法 - 唯一公平的答案是「這足夠快嗎?」是「你介紹了嗎?」 – djechlin
排序算法是什麼?按字母順序排列?數值?按時間戳?我發現自己在思考關於Firebase的這些模糊問題,並且通常會發現,一旦我仔細確定了期望的行爲,它們就容易解決。 – Kato