我有一本字典,我将用它来填充表格:
["struvite":716,"calcium_oxalate":388,"urate":217,"calcium_phosphate":30,"silica":21,"compound":41]
据我所知,字典根据定义没有排序,而且tableView适用于数组,而不是字典。
所以我的问题是双重的。我需要按值对这些数据进行排序并将其放在一个数组中,以便我可以轻松地将其放入表中。我发现这个answer用于排序,但它似乎已经过时了Swift 2.
我正在寻找的结果是这样的:
struvite(716)
草酸钙(388)
urate(217)
化合物(41)
磷酸钙(30)
二氧化硅(21)其中每一行都是数组的一个元素,它们按字典中的值一次降序显示。一旦它在一个数组中,我可以把它放到一个表中。
答案 0 :(得分:2)
let dict = ["struvite": 716, "calcium_oxalate": 388, "urate": 217, "calcium_phosphate": 30, "silica": 21, "compound": 41]
let test = dict.sort { $0.1 > $1.1 }
结果是:
[("struvite", 716), ("calcium_oxalate", 388), ("urate", 217), ("compound", 41), ("calcium_phosphate", 30), ("silica", 21)]
您可以访问此内容并将其分配给您的单元格,如下所示:
let name = test[indexPath.row].0
let number = test[indexPath.row].1
答案 1 :(得分:1)
在swift中这样容易实现的方法就是这些,假设是dictionary : [String:Int]
。
struct Compound : Equatable, Comparable {
let name : String
let value : Int
}
func ==(x : Compound, y : Compound) -> Bool {
return x.value == y.value
}
func <(x : Compound, y : Compound) -> Bool {
return x.value < y.value
}
var compounds = [Compound]()
for (key, value) in dictionary {
compounds.append(Compound(name: key, value: value)
}
let sorted = compounds.sort(>)
答案 2 :(得分:1)
从您的示例开始:
let dict = ["struvite":716,"calcium_oxalate":388,"urate":217,"calcium_phosphate":30,"silica":21,"compound":41]
这部分将从最大的实际变换字典到tupples数组排序:
let sortedTupples = dict.sort { (lhs, rhs) -> Bool in
return lhs.1 > rhs.1
}
这将产生您想要的确切形式,它是一个字符串数组:
let arrayOfStringsFromTupples = sortedTupples.map { "\($0.0) (\($0.1))" }
Map函数将每个tupple条目映射到clojure类型中定义,这里我们刚刚在string对象上创建,但实际上它可能是任何不同的对象。
简而言之
let dict = ["struvite":716,"calcium_oxalate":388,"urate":217,"calcium_phosphate":30,"silica":21,"compound":41]
let allInOne = dict.sort { (lhs, rhs) -> Bool in
return lhs.1 > rhs.1
}.map { "\($0.0) (\($0.1))" }