如何创建和排序浮点字典数组
How to Create and Sort an Array of Dictionaries of Floats
我有一个自定义对象,其中包含一些浮点数属性(以及其他字符串、日期等)。丢弃非浮动属性,我想过滤掉非零属性,按大小排序并显示它们。但是,作为 swift 新手,我遇到了麻烦。
我的对象是这样的:
@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;
}
到目前为止,根据我在 Google 上找到的内容,我的代码是:
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 要求我插入 anyObject 代码,但出现错误 'Any Object is Not Subtype of NSNumber'。另外,我不太明白first、second等等是什么意思……编译器能理解这些术语吗?似乎有更好的方法来做到这一点。
提前感谢您的任何建议。
您必须使用集合方法 sorted
,因为您不能对不可变值使用可变成员。
其次,排序函数cloure没有第三个参数(first, second)。请参阅文档 here
第三,对于 first["value"]?.floatValue
,您必须提供默认值,例如“0”,因为它是可选的。
let sortedArray = propArray.sorted { (first, second) -> Bool in
return first["value"]?.floatValue ?? 0 < second["value"]?.floatValue ?? 0
}
我有一个自定义对象,其中包含一些浮点数属性(以及其他字符串、日期等)。丢弃非浮动属性,我想过滤掉非零属性,按大小排序并显示它们。但是,作为 swift 新手,我遇到了麻烦。
我的对象是这样的:
@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;
}
到目前为止,根据我在 Google 上找到的内容,我的代码是:
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 要求我插入 anyObject 代码,但出现错误 'Any Object is Not Subtype of NSNumber'。另外,我不太明白first、second等等是什么意思……编译器能理解这些术语吗?似乎有更好的方法来做到这一点。
提前感谢您的任何建议。
您必须使用集合方法 sorted
,因为您不能对不可变值使用可变成员。
其次,排序函数cloure没有第三个参数(first, second)。请参阅文档 here
第三,对于 first["value"]?.floatValue
,您必须提供默认值,例如“0”,因为它是可选的。
let sortedArray = propArray.sorted { (first, second) -> Bool in
return first["value"]?.floatValue ?? 0 < second["value"]?.floatValue ?? 0
}