iOS Swift:按值排序数组时,将字符串转换为float

时间:2018-01-29 20:15:28

标签: ios arrays swift sorting swift3

在iOS Swift中,我按照下面的代码按降序排序数组。代码工作正常,但是,“价格”不是一个双重而是一个字符串(因此,当代码是多位数时,代码会出现错误。)

如何在这个单行排序函数中将字符串'Price'转换为double?

OfferList.sort { $0.Price > $1.Price }

我知道在将排序编写为多行循环时有一些方法可以做到这一点,但有没有办法在上面的行中直接进行?

2 个答案:

答案 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