我是一个很快的新手,我正在尝试编写一个功能,允许我的Firebase数据库中有6个最受欢迎的人。
我写了一个观察者,将用户放在这样的数组中:
[[userID: numberOfFollowers], [userID: numberOfFollowers], ...]
我想只保留6位拥有最多关注者的用户。
你知道是否有可能吗?
var people = [[String: Int]]()
func loadPeople() {
var REF_FOLLOWERS = Database.database().reference().child("followers")
REF_FOLLOWERS.observe(.value, with: { (snapshot: DataSnapshot!) in
print("Got snapshot")
if let dict = snapshot.value as? [String: Any] {
for (key, value) in dict {
var count = 1
if let array = value as? [String: Any] {
for _ in array {
count += 1
}
}
self.people.append([key : count])
self.tableView.reloadData()
}
}
})
}
答案 0 :(得分:3)
您可以使用以下内容:
var REF_FOLLOWERS = Database.database().reference().child("followers").queryOrdered(byChild: "numberOfFollowers").queryLimited(toFirst: 6).observe(.value, with: { (snapshot: DataSnapshot!) in {
}
这将使前六名的粉丝人数最多。
答案 1 :(得分:0)
REF_FOLLOWERS.observe(.value, with: { (snapshot: DataSnapshot!) in
print("Got snapshot")
if let dict = snapshot.value as? [String: Any] {
for (key, value) in dict {
var count = 1
if let array = value as? [String: Any] {
for _ in array {
count += 1
}
}
self.people.append([key : count])
}
}
// this line will sort them and return first 6
self.people = self.people.sorted(by: { $0["numberOfFollowers"] ?? 0 > $1["numberOfFollowers"] ?? 0}).prefix(6)
// reload data just once at the end - be efficient!
self.tableView.reloadData()
})