for循环后按值排序字典数组?

时间:2016-09-12 20:43:38

标签: ios arrays swift dictionary

我已经看到很多类似问题的答案,但到目前为止还没有一种方法可行。

if let users = snapshot.value!["users"] as? Dictionary<String,AnyObject> {

 each.users = Int(users.count)

var pointsArray = [Dictionary<String,Int>]()
   for (key, value) in users {


              let uid = key
              let points = value["points"] as! Int
              pointsArray.append([uid : points])

                        }

然后我需要通过&#34; points&#34;对pointsArray进行排序,从高到低排序,抓住第0个(最高)元素,然后抓住uid使用。

我试过了:

  var myArr = Array(pointsArray.keys)
    var sortedKeys = sort(myArr) {
    var obj1 = dict[$0] // get ob associated w/ key 1
    var obj2 = dict[$1] // get ob associated w/ key 2
    return obj1 > obj2
           }

这给了我

Value of type [ Dictionary <String,Int>] has no member keys.

我想这是因为我试图在我的一系列dicts和dicts本身上运行排序?如何切换到实际的词典与在阵列上运行排序?

1 个答案:

答案 0 :(得分:1)

是的 - 您没有正确访问词典的键。

这是一个有效的代码:

var pointsArray = [Dictionary<String, Int>]()

pointsArray.append(["1" : 10])
pointsArray.append(["2" : 45])
pointsArray.append(["3" : 30])

// sort by points
let sorted = pointsArray.sort({ $0.first!.1 > $1.first!.1 })

print(sorted) // [["2": 45], ["3": 30], ["1": 10]]

Array(pointsArray.keys) - 这不起作用,因为pointsArrayarray,因此它没有keys属性。 pointsArray的内容是字典,他们有keys。因此,您可以访问第一个字典的键,如下所示:pointsArray[0].keys