在iOS Swift中,我按照下面的代码按降序排序数组。代码工作正常,但是,“价格”不是一个双重而是一个字符串(因此,当代码是多位数时,代码会出现错误。)
如何在这个单行排序函数中将字符串'Price'转换为double?
OfferList.sort { $0.Price > $1.Price }
我知道在将排序编写为多行循环时有一些方法可以做到这一点,但有没有办法在上面的行中直接进行?
答案 0 :(得分:4)
Double
有一个初始化程序,可以使用StringProtocol
,但当然它返回Optional
,因为字符串可能实际上也可能不是数字。为了将你的字符串排序为双打,你需要一个后备选项,以防它失败,否则你需要强制打开这些init
,如果你可以保证他们将永远是双打的。选项如下所示:
//Fallback using a nil-coalescing operator
OfferList.sort { (Double($0.Price) ?? 0) > (Double($1.Price) ?? 0) }
//Force unwrapping
OfferList.sort { Double($0.Price)! > Double($1.Price)! }
作为一个小的,无关的,在驼峰的情况下命名对象的变量和属性被认为是最佳实践,例如offerList
和$0.price
。当然不是要求,但这是其他Swift开发人员所期望的。
答案 1 :(得分:0)
使用NSArray的Sorted方法转换并从Dictionary Value进行排序。使用以下代码进行排序。
let sortedResults: NSArray = arry.sorted { (obj1, obj2) -> Bool in
if ((obj1 as! NSDictionary).allKeys as NSArray).contains("id") && ((obj2 as! NSDictionary).allKeys as NSArray).contains("id"){
return Float((obj1 as! NSDictionary)["id"] as! String)! < Float((obj2 as! NSDictionary)["id"] as! String)!
}
else{
return true
}
} as NSArray