我已经看到很多类似问题的答案,但到目前为止还没有一种方法可行。
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本身上运行排序?如何切换到实际的词典与在阵列上运行排序?
答案 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)
- 这不起作用,因为pointsArray
是array
,因此它没有keys
属性。 pointsArray
的内容是字典,他们有keys
。因此,您可以访问第一个字典的键,如下所示:pointsArray[0].keys