当前位置: 首页 > 面试题库 >

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

沈琛
2023-03-14
问题内容

我想获得前10名用户的最高游戏分数并将其显示在表格视图中。

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不提供任何通过查询来逆转排序顺序的方法。但是,如果您将分数存储为负值,那么超级简单。

这是一个结构

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

当然,如果分数数量有限,也可以将它们读入数组并进行排序。

为了完整起见,如果您不想将分数存储为负值,请按以下步骤操作。

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

上面的代码通过queryLimited(toLast)读取三个最高值,分别是12、20和22,并填充了一个数组。该数组可以反转,对22、20和12进行降序排序。

最后一个选择是将它们读为12、22、20,但将每个amt插入位置0的数组中。因此12将位于索引0,然后22将位于索引0,12将位于索引1,依此类推。



 类似资料:
  • 我想获取日期字段,但下面的代码没有这样做。Toast显示null(字符串日期的值)。 公共字符串日期;

  • 我想在Android Studio中获取isSeen节点的值。M6F2mJjQ8uGPXAynZzV是消息的id,并将消息更改为消息。我想在适配器类中获得这个值。

  • 我真的很难从数据库中收集数据。我正在使用实时数据库,我正在将这些值添加到一个可以单击的列表中。 当我单击列表上的用户时,我需要获取用户名值来创建聊天ID。这是我的问题,以获得键内的值。我现在的做法似乎行不通。 这是我的数据库 我需要取给“name”的值。 这是我的密码

  • 我在两个不同的地方创建了两个项目。比如美国中部和亚洲东北部。现在,对于这两个不同的项目,我想在各自的区域部署云功能。 我如何在环境变量或process.env中获取项目区域值,以便我可以使用它在云函数中设置该区域。

  • 我一直无法从Firebase中获取显示名称。下面是注册过程编码 控制台.log显示“用户名集!”,控制台.log(firebaseUser)显示显示名称是在当前用户的数据库中设置的,并且名称是我期望的。然而 给出null,并且 这也返回为null。 我一直在寻找获取firebase数据集数据的方法,但我无法做到这一点。 如果有人能给我一些建议,那就太好了。 非常感谢。

  • 问题内容: 这是Firebase的后续问题-构建数据库的正确方法 我具有以下数据库结构: 我想查询歌手参考,看看歌手是否已在数据库中,以及歌手是否在数据库中,请获取歌手键(在上面的示例中为 -KKMkpA22PeoHtBAPyKm )。 我尝试了这个: 但是“ snapshot.key”只给了我“艺术家”的父密钥。 如何获得所需的钥匙? 问题答案: 在if条件下,您需要获取allKeys才能获取“