Swift 按 2 个参数对数组排序
Swift sort array by 2 parameters
该数组包含实体实例(核心数据图形库):
let timCook = Entity(type: "Employees")
timCook["name"] = "Tim Cook"
timCook["company"] = "Apple"
上面的代码行不通,我认为 && 不是按多个值排序的正确方法...
self.storage.sortInPlace ({ ([=12=]["company"] as? String) < (["company"] as? String)
&& ([=12=]["name"] as? String) < (["name"] as? String)
})
谢谢
好的,如果您想先按公司再按名称排序,您首先必须检查公司是否相等。如果公司相同,则返回按名称排序,否则,您只是 return 两家公司比较的结果。
self.storage.sortInPlace {
if ([=10=]["company"] as! String) == (["company"] as! String)
{
return ([=10=]["name"] as! String) < (["name"] as! String)
}
return [=10=]["company"] as! String) < (["company"] as! String)
}
甚至更短:
self.storage.sortInPlace { (([=11=]["company"] as! String) == (["company"] as! String)) ? (([=11=]["name"] as! String) < (["name"] as! String)) : ([=11=]["company"] as! String) < (["company"] as! String)) }
不要经常使用as!
。实际上,根本不要使用它。如果您确定该值存在,那么您应该选择另一种数据类型而不是字典。
struct Storage {
let company: String
let name: String
}
var storage: [Storage]
// fill storage with objects
storage.sortInPlace {
if [=10=].company == .company { return [=10=].name < .name }
return [=10=].company < .company
}
该数组包含实体实例(核心数据图形库):
let timCook = Entity(type: "Employees")
timCook["name"] = "Tim Cook"
timCook["company"] = "Apple"
上面的代码行不通,我认为 && 不是按多个值排序的正确方法...
self.storage.sortInPlace ({ ([=12=]["company"] as? String) < (["company"] as? String)
&& ([=12=]["name"] as? String) < (["name"] as? String)
})
谢谢
好的,如果您想先按公司再按名称排序,您首先必须检查公司是否相等。如果公司相同,则返回按名称排序,否则,您只是 return 两家公司比较的结果。
self.storage.sortInPlace {
if ([=10=]["company"] as! String) == (["company"] as! String)
{
return ([=10=]["name"] as! String) < (["name"] as! String)
}
return [=10=]["company"] as! String) < (["company"] as! String)
}
甚至更短:
self.storage.sortInPlace { (([=11=]["company"] as! String) == (["company"] as! String)) ? (([=11=]["name"] as! String) < (["name"] as! String)) : ([=11=]["company"] as! String) < (["company"] as! String)) }
不要经常使用as!
。实际上,根本不要使用它。如果您确定该值存在,那么您应该选择另一种数据类型而不是字典。
struct Storage {
let company: String
let name: String
}
var storage: [Storage]
// fill storage with objects
storage.sortInPlace {
if [=10=].company == .company { return [=10=].name < .name }
return [=10=].company < .company
}