Swift - 使用[String:Int]排序和数组

时间:2018-02-08 16:32:37

标签: arrays swift firebase firebase-realtime-database

我是一个很快的新手,我正在尝试编写一个功能,允许我的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()
        }
     }
  })
}

2 个答案:

答案 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()
})