如何创建和排序浮点数字典数组



我有一个自定义对象,其中包含一些浮点数属性(以及其他字符串,日期等属性(。丢弃非浮点属性,我想过滤掉非零属性,按大小对它们进行排序并显示它们。然而,作为一个快速的新手,我遇到了麻烦。

我的对象如下所示:

@objc public class MyTone: NSObject {
var title: String = ""
var date: Date = Date()
var val1: Float = 0
var val2: Float = 0
var val3: Float = 0
//...
var val10: Float = 0;
}

到目前为止,根据我在谷歌上找到的代码,我的代码是:

let propArray: [[String: AnyObject]] = [
["prop": "val1" as AnyObject,
"value": 0.3 as AnyObject],
["prop":  "val2" as AnyObject,
"value": 0.2 as AnyObject],
["prop": "val3" as AnyObject,
"value": 0.4 as AnyObject]
]
let sortedArray = propArray.sort { (first, second,third) in
return first["value"]?.floatValue < second["value"]?.floatValue< third["value"]?.floatValue
}

Fixit要求我插入任何对象代码,但是我收到错误"任何对象都不是NSNumber的子类型"。 另外,我真的不明白第一,第二等等是什么意思......编译器是否理解这些术语? 似乎可能有更好的方法来做到这一点。

提前感谢您的任何建议。

您必须使用集合方法sorted因为您不能在不可变值上使用突变成员。

其次,没有排序函数 cloure 的第三个参数(第一个,第二个(。在此处查看文档

第三,对于first["value"]?.floatValue您必须提供默认值,例如"0",因为它是可选的。

let sortedArray = propArray.sorted { (first, second) -> Bool in
return first["value"]?.floatValue ?? 0 < second["value"]?.floatValue ?? 0
}

最新更新