iOS Swift:按值对数组排序时,在何处将字符串转换为浮点
在iOS Swift中,我按照以下代码按降序排列数组。代码运行良好,但是,“Price”不是一个双精度的,而是一个字符串(因此当前代码在使用多位数时会出现一些错误) 在这个单行排序函数中,如何将字符串“Price”转换为doubleiOS Swift:按值对数组排序时,在何处将字符串转换为浮点,ios,arrays,swift,sorting,swift3,Ios,Arrays,Swift,Sorting,Swift3,在iOS Swift中,我按照以下代码按降序排列数组。代码运行良好,但是,“Price”不是一个双精度的,而是一个字符串(因此当前代码在使用多位数时会出现一些错误) 在这个单行排序函数中,如何将字符串“Price”转换为double OfferList.sort { $0.Price > $1.Price } 我知道在将排序写入多行循环时有一些方法可以实现,但是有没有一种方法可以直接在上面的行中实现呢?Double有一个初始值设定项,它可以采用StringProtocol,当然它会返回一
OfferList.sort { $0.Price > $1.Price }
我知道在将排序写入多行循环时有一些方法可以实现,但是有没有一种方法可以直接在上面的行中实现呢?
Double
有一个初始值设定项,它可以采用StringProtocol
,当然它会返回一个可选的,因为字符串可能是数字,也可能不是数字。为了将字符串排序为双倍,您需要一个备用选项以防失败,否则您需要强制展开这些init
s,前提是您可以保证它们始终是双倍的。选项如下所示:
//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开发人员所期望的。使用NSArray的排序方法从字典值转换和排序。使用下面的代码进行排序
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
let sortedResults:NSArray=arry.sorted{(obj1,obj2)->Bool-in
if((obj1作为!NSDictionary).allKeys作为NSArray.contains(“id”)&((obj2作为!NSDictionary.allKeys作为NSArray.contains(“id”){
返回浮点((obj1作为!NSDictionary)[“id”]as!String)!
非常感谢您。