如何从价值的降序从Firebase获取数据?

我想获得前10名用户的高分,并以表格forms显示。

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名得分手的名字和得分。

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

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

这是一个结构

 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"; }) 

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

为了完整性,如果你不想把分数存储为负值,下面是如何工作。

  let scoresRef = self.ref.child("scores") let queryRef = scoresRef.queryOrdered(byChild: "amt").queryLimited(toLast: 3) queryRef.observeSingleEvent(of: .value, with: { snapshot in var scoresArray = [Int]() for child in snapshot.children { let snap = child as! DataSnapshot let score = snap.childSnapshot(forPath: "amt") scoresArray.append(score.value as! Int) } scoresArray = scoresArray.reversed() print(scoresArray) }) 

上面的代码通过12,20和22 queryLimited(toLast)读取三个最高值并填充数组。 arrays可以颠倒,顺序是22,20和12。

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

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