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
}