该数组包含Entity实例(Core Data的图形库):
self.storage.sortInPlace ({ ($0["company"] as? String) < ($1["company"] as? String)
&& ($0["name"] as? String) < ($1["name"] as? String)
})
以上代码无效,我认为&amp;&amp;不是按多个值排序的正确方法......
{{1}}
感谢
答案 0 :(得分:4)
不要使用as!
这么多。实际上,根本不使用它。如果你确定该值存在,那么你应该选择另一种数据类型而不是字典。
struct Storage {
let company: String
let name: String
}
var storage: [Storage]
// fill storage with objects
storage.sortInPlace {
if $0.company == $1.company { return $0.name < $1.name }
return $0.company < $1.company
}
答案 1 :(得分:1)
好的,如果您想先按公司排序,然后按名称排序,首先必须检查公司的平等性。如果公司是相同的,你会回归到按名称排序,否则,你只需返回两家公司之间的比较结果。
self.storage.sortInPlace {
if ($0["company"] as! String) == ($1["company"] as! String)
{
return ($0["name"] as! String) < ($1["name"] as! String)
}
return $0["company"] as! String) < ($1["company"] as! String)
}
甚至更短:
self.storage.sortInPlace { (($0["company"] as! String) == ($1["company"] as! String)) ? (($0["name"] as! String) < ($1["name"] as! String)) : ($0["company"] as! String) < ($1["company"] as! String)) }