2017-07-17 66 views
-1

我想获得前10名用户的游戏高分,并在表格视图中显示它们。如何从价值降序的Firebase中获取数据?

leaderboards 
CQVudhI2OjTfNbqWOWi2T1DTWKw2 
HIGH-SCORE: 23 
PLAYER-NAME: Russell 
REACTION-TIME: .9 
SWIPES: 12 

F9IbjpVSE8g5YN3PX0sdhSNGULJ3 
HIGH-SCORE: 29 
PLAYER-NAME: Clayton 
REACTION-TIME: .87 
SWIPES: 22 

HDIHCUSJDHCJHZKSHJXH 
HIGH-SCORE: 89 
PLAYER-NAME: Damien 
REACTION-TIME: .77 
SWIPES: 32 

jdhsjdbwkjsdkahnkdnk232j3j2 
HIGH-SCORE: 43 
PLAYER-NAME: Christopher 
REACTION-TIME: .99 
SWIPES: 32 

在表格视图中,我希望展示10个最高得分者的名字和得分。

任何帮助,将不胜感激。谢谢

回答

2

Firebase没有任何方法通过查询来反转排序顺序。但是,如果您将分数存储为负值,那么这非常容易。

这里的一个结构

scores 
    score_0 
    amt: -20 
    score_1 
    amt: -10 
    score_2 
    amt: -12 
    score_3 
    amt: -1 
    score_4 
    amt: -22 

,然后将代码读取三甲 '高' 的22分,随后20和12

let scoresRef = self.ref.child("scores") 
    let queryRef = scoresRef.queryOrdered(byChild: "amt").queryLimited(toFirst: 3) 

    queryRef.observeSingleEvent(of: .value, with: { snapshot in 
     for child in snapshot.children { 
      let snap = child as! DataSnapshot 
      print(snap.value) 
     } 
    }) 

和输出

Optional({ 
    amt = "-22"; 
}) 
Optional({ 
    amt = "-20"; 
}) 
Optional({ 
    amt = "-12"; 
}) 

当然,如果分数有限,他们可以读入数组并排序。

为了保持完整性,如果您不想将分数存储为负值,以下是如何工作的。

​​

上面的代码经由queryLimited(toLast),它们是12,20和22,并填充一个阵列中的三个最高值的读取。阵列可以颠倒,按降序排列22,20和12.

最后一个选项是将它们读为12,22,20,但是将每个amt插入到位置0的数组中。所以12将位于索引0 ,那么22将在索引0,而12将在索引1等。

+0

感谢大家的帮助!我做的是做一个querylimted(到最后10)这是我得到了10个最高分,然后将它添加到一个数组并将其逆转。这被认为是足够好的代码? –

+0

@russsellphillips如果它有效,稳定和易于维护,那绝对是的,它已经足够好了!如果我的答案有帮助,请接受它,以便它可以帮助其他人! – Jay

+0

完成了!万分感谢 –

0

我想你必须首先将所有的数据库加载到一个结构数组中,将数组过滤到新的数组中(如何执行此操作,请检查here),然后在tableView上表示它。顺便说一下,如果您只是从Firebase开始,我强烈建议您阅读this教程。我希望我的回答很有用:)

+0

这个答案是错误的。 – Jay