如何在不知道项目索引

时间:2018-02-23 23:56:28

标签: algorithm sorting firebase firebase-realtime-database

我有一个Firebase数据库,其中包含一个名为queue的集合,其文档是队列中的项目。我需要保持它们的顺序(FIFO),但如果需要,还需要能够在队列中将它们移动任意数量。它们不能在数据库中保存。 This回答一个问题可以帮助我解决这个问题。但是,这假设您知道哪些项目处于什么位置。这是给出的解决方案:

  

在文档中有一个具有浮点值的position字段。查询按位置排序的集合。然后:

     
      
  1. 将项目放在最后时,请将其设为lastItem.position + 100
  2.   
  3. 移动项目时,请将position设置为(prev.position + next.position) / 2.0,其中prev和next属于新职位的上一个和下一个。
  4.   
  5. 将项目移至行首时,firstItem.position / 2.0
  6.         

    e.g。

    A: 100                   C:  50                    C:  50
    B: 200                   A: 100 -> move below B    B: 200
    C: 300 -> move to top    B: 200                    A: 300
    D: 400                   D: 400                    D: 400
    

如何在不知道B位于我要移动到的地方的情况下,如何“将D移动到两个地方”这样的移动?我不想对整个集合进行排序以便移动它,因为这样效率很低。

1 个答案:

答案 0 :(得分:0)

如果要更改项目相对于彼此的位置,则需要知道这些项目的索引。如果您没有允许您了解其索引的先验知识,则需要加载您正在修改的范围内的所有项目。据我所知,没有任何API快捷方式可以提供帮助。